Java Swing编程中的拖放功能怎么用
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章给大家介绍Java Swing编程中的拖放功能怎么用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。拖放功能其实就像我们使用windows 的时候按住CTRL然后拖动某个图
千家信息网最后更新 2025年01月18日Java Swing编程中的拖放功能怎么用
这篇文章给大家介绍Java Swing编程中的拖放功能怎么用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
拖放功能其实就像我们使用windows 的时候按住CTRL然后拖动某个图标,会复制该对象。这给用户提供了很棒的用户体验,没办法程序员总是给自己找麻烦,让用户觉得方便,其实这个功能AWT也提供了Swing话只是利用了这个,因为这和界面没什么关系。
DropTarget(拖放目的地)eg(将图片拖入后显示):
public class TestDropTarget { final int DESKTOP_WIDTH = 480; final int DESKTOP_HEIGHT = 360; final int FRAME_DISTANCE = 30; JFrame jf = new JFrame("测试拖放目标——把图片文件拖入该窗口"); //定义一个虚拟桌面 private JDesktopPane desktop = new JDesktopPane(); //保存下一个内部窗口的座标点 private int nextFrameX; private int nextFrameY; //定义内部窗口为虚拟桌面的1/2大小 private int width = DESKTOP_WIDTH / 2; private int height = DESKTOP_HEIGHT / 2; public void init() { desktop.setPreferredSize(new Dimension(DESKTOP_WIDTH, DESKTOP_HEIGHT)); //将当前窗口创建成拖放源 new DropTarget(jf, DnDConstants.ACTION_COPY , new ImageDropTargetListener()); jf.add(desktop); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } class ImageDropTargetListener extends DropTargetAdapter { public void drop(DropTargetDropEvent event) { //接受复制操作 event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); //获取拖放的内容 Transferable transferable = event.getTransferable(); DataFlavor[] flavors = transferable.getTransferDataFlavors(); //遍历拖放内容里的所有数据格式 for (int i = 0; i < flavors.length; i++) { DataFlavor d = flavors[i]; try { //如果拖放内容的数据格式是文件列表 if (d.equals(DataFlavor.javaFileListFlavor)) { //取出拖放操作里的文件列表 java.util.List fileList = (java.util.List) transferable.getTransferData(d); for (Object f : fileList) { //显示每个文件 showImage((File)f , event); } } } catch (Exception e) { e.printStackTrace(); } //强制拖放操作结束,停止阻塞拖放源 event.dropComplete(true); } } //显示每个文件的工具方法 private void showImage(File f , DropTargetDropEvent event)throws java.io.IOException { Image image = ImageIO.read(f); if (image == null) { //强制拖放操作结束,停止阻塞拖放源 event.dropComplete(true); JOptionPane.showInternalMessageDialog(desktop , "系统不支持这种类型的文件"); //方法返回,不会继续操作 return; } ImageIcon icon = new ImageIcon(image); //创建内部窗口显示该图片 JInternalFrame iframe = new JInternalFrame(f.getName() ,true , true , true , true); JLabel imageLabel = new JLabel(icon); iframe.add(new JScrollPane(imageLabel)); desktop.add(iframe); //设置内部窗口的原始位置(内部窗口默认大小是0X0,放在0,0位置) iframe.reshape(nextFrameX, nextFrameY, width, height); //使该窗口可见,并尝试选中它 iframe.show(); //计算下一个内部窗口的位置 nextFrameX += FRAME_DISTANCE; nextFrameY += FRAME_DISTANCE; if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0; if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0; } } public static void main(String[] args) { new TestDropTarget().init(); } }
DropSource(拖放源)eg(将文字拖入支持拖放的文本编辑器Editplus,Eclipse,idea等。。。记事本,UltraEdit竟然不支持)拖放源主要是要将拖放对象组成Transferable对象
public class TestDragSource { JFrame jf = new JFrame("Swing的拖放支持"); JLabel srcLabel = new JLabel("AWT的拖放支持./n" +"将该文本域的内容拖入其他程序./n"); public void init() { DragSource dragSource = DragSource.getDefaultDragSource(); //将srcLabel转换成拖放源,它能接受复制、移动两种操作 dragSource.createDefaultDragGestureRecognizer(srcLabel, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() { public void dragGestureRecognized(DragGestureEvent event) { //将JLabel里的文本信息包装成Transferable对象 String txt = srcLabel.getText(); Transferable transferable = new StringSelection(txt); //继续拖放操作,拖放过程中使用手状光标 event.startDrag(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR), transferable); } }); jf.add(new JScrollPane(srcLabel)); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new TestDragSource().init(); } }
JDK1.4开始对Swing的拖放功能做了简化,不同组件分别提供了拖放源和拖放目标,这里就讲用的最多的文本域,他既能拖入文本,也能将文本拖出,非常方便。
但默认这个功能没有启用,要手动调用setDragEnabled方法,使其生效。eg
public class SwingDndSupport { JFrame jf = new JFrame("Swing的拖放支持"); JTextArea srcTxt = new JTextArea(8 , 30); JTextField jtf = new JTextField(34); public void init() { srcTxt.append("AWT的拖放支持./n"); srcTxt.append("将该文本域的内容拖入其他程序./n"); //启动文本域和单行文本框的拖放支持 srcTxt.setDragEnabled(true); jtf.setDragEnabled(true); jf.add(new JScrollPane(srcTxt)); jf.add(jtf , BorderLayout.SOUTH); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new SwingDndSupport().init(); } }
方便吧,今天就讲到这里了。
关于Java Swing编程中的拖放功能怎么用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
支持
功能
内容
文本
对象
本域
用户
程序
编程
图片
更多
桌面
目标
帮助
不同
不错
没什么
信息包
光标
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库的检查点是什么原因
什么是网络技术转让货源充足
软件开发ap专业名称
国土空间规划成果数据库检查
海伦天气预报软件开发
1001网络技术有限公司
数据库的对象有谁
五季网络安全插画
为什么要经常重启服务器
微软服务器有多热
ios软件开发培训学校
聊城安卓软件开发公司有哪些
数据库无对应疾病
如何理解金融科技与互联网金融
软件开发职业生涯规划作文
技术软件开发文档
126邮件服务器是什么
无线网络技术分为几种
成都软件开发驻场服务公司
潍坊智慧云网络技术
南京安卓智能化软件开发
数据库查询语句怎么分开
福州联合网络技术有限公司
提升公司网络安全保障能力
用友t1服务器
火山石软件开发
polcon数据库
网络安全心理健康小报
服务器清除登录密码
网络安全的个人见解