[Java]接受拖拽文件的窗口
至于这个问题,Java的awt.dnd包下提供了许多完成这一功能的类
例如DropTarget、DropTargetListener等
先来讲一下DropTarget类,这个类完成和拖拽、复制文件等操作和Component的关联
常用的构造方法有这些:
DropTarget(Component c, DropTargetListener dtl)
c:要与它关联的组件
dtl:执行事件处理的DropTargetListener
DropTarget(Component c, int ops, DropTargetListener dtl)
ops:默认的可接受操作
另外两个参数和上面是一样的
可接受的操作有哪些呢?DnDConstants类中有着下面几种操作(字段):
static int |
ACTION_COPY 表示“复制”操作的 int 值。 |
static int |
ACTION_COPY_OR_MOVE 表示“复制”或“移动”操作的 int 值。 |
static int |
ACTION_LINK 表示“链接”操作的 int 值。 |
static int |
ACTION_MOVE 表示“移动”操作的 int 值。 |
static int |
ACTION_NONE 表示无操作的 int 值。 |
static int |
ACTION_REFERENCE 表示“引用”操作的 int 值(等同于 ACTION_LINK)。 |
接着来谈谈DropTargetListener,API帮助文档中提供比较详细的说明,在这就不过多地介绍了,
如果只是单独的使用文件的拖拽,可以使用DropTargetAdapter这一个类,对于上面这个接口中
drop(DropTargetDropEvent)
以外的所有方法都定义了 null 实现,所以是实现接口的时候就比较方便
下面给出一个简单的接受拖拽文件的程序的源代码:
package 图形界面; import javax.swing.*; import java.util.List; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.*; import java.io.File; import java.io.IOException; /** * @author Administrator */ public class 拖拽文件 extends JFrame{ private static final long serialVersionUID = -3081282189290446349L; private JTextArea jta; private JScrollPane jsp; private void init_drop(){ new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() { @Override public void drop(DropTargetDropEvent dtde) { if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){ //判断是否支持此文件的格式 dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); //接受该文件 try { @SuppressWarnings("unchecked") List<File> list = (List<File>) dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor); jta.setText(jta.getText()+list.get(list.size() - 1).getAbsolutePath() + "\r\n"); } catch (UnsupportedFlavorException | IOException e) { e.printStackTrace(); } }else{ dtde.rejectDrop(); //拒绝该拖拽文件 } } }); } private void init(){ jta = new JTextArea(); jsp = new JScrollPane(jta); jsp.setBounds(30, 30, 200, 200); jta.setForeground(Color.green); jta.setRows(40); } public 拖拽文件(){ this.init(); this.setTitle("拖拽文件测试"); this.setLayout(null); this.add(jsp); this.init_drop(); this.setBounds(420, 280, 300, 320); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); } public static void main(String args[]){ new 拖拽文件(); } }
[Java]接受拖拽文件的窗口的更多相关文章
- atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结
atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...
- window响应拖拽文件操作
window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...
- Unity输出PC端(Windows) 拖拽文件到app中
需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...
- 解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件
在Duilib中集成CEF浏览器项目实际开发中,遇到一个问题. 一个需求从资源管理器(桌面)拖拽文件到客户端,窗口捕获WM_DROPFILES消息然后进行消息处理,但客户区是集成的CEF浏览器,浏览器 ...
- c++ 发送消息,模拟拖拽文件
#include <ShlObj.h> BOOL SimulateDropFile(CString strFilePath) { }; wcstombs(szFile, strFilePa ...
- Java实现拖拽上传
原文:http://www.open-open.com/code/view/1437358795584 在项目开发中由于实际需求,需要开发拖拽上传的功能,ok! 先看效果图: jsp上传前端代码: & ...
- vm虚拟机Kali无法拖拽文件解决办法
vm虚拟机Kali无法拖拽文件解决办法 apt-get updateapt-get install open-vm-tools-desktop fusereboot
- Winform程序拖拽文件到窗体
1:首先需要将接收拖拽的窗体属性AllowDrop设置为True. 2:编写窗体拖拽进入(DragEnter)和拖拽完成(DragDrop)事件. private void FrmCode_DragE ...
- html5实现拖拽文件上传
以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...
随机推荐
- prometheus and collectd and docker
sudo docker run --name prometheus -d -v /data/prometheusdata/prometheus.yml:/etc/prometheus/prometh ...
- C#中DataSet、DataTable、DataReader的区别
简单说就是: DataSet:数据集.一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable DataTable:数据表 ...
- JMeter(十四)-自动生成测试报告
很多朋友都在问jmeter如何生成测试报告,这里随便说两句. 环境要求 1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚本文件 基本操作 1:在你的脚 ...
- 20144306《网络对抗》MAL_PC平台逆向破解_Advanced
PC平台逆向破解_Advanced 一.注入shellcode并执行 1.什么是shellcode? shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏 ...
- 【代码备份】ZJ10086测试环境成功代码备份
vuser_init(){ lr_start_transaction("login"); web_url("101.132.17.138", ...
- mysql 数据操作 多表查询 子查询 带IN关键字的子查询
1 带IN关键字的子查询 #查询平均年龄在25岁以上的部门名关键点部门名 以查询员工表的dep_id的结果 当作另外一条sql语句查询条件使用 in (sql语句) mysql ; +-------- ...
- 修改lastpass主密码后需重启firefox才能加载已保存的站点密码或用导入工具
最近索尼事件闹得沸沸扬扬,预防黑客先从升级密码开始.由于开发的需要一般是用firefox作为默认的浏览器,很早以前就装了lastpass密码管理器作为必备附加组件,在注册时按一下Alt+G就会帮你生成 ...
- 四、Mosquitto 高级应用之用户配置
本文将讲解 Mosquitto 用户机制.如果还没有搭建 Mosquitto 服务的可以参考我的另外两篇文章<< 一.Mosquitto 介绍&安装>> << ...
- (转)找回Git中丢失的Commit
总结:更新代码前一定要先将本地修改的文件存到本地git仓库.今天脑残直接更新了远程仓库代码导入今天写的代码...... @[git|commit|reflog] 在使用Git的过程中,有时候会因为一些 ...
- 获取Let`s Encrypt证书的三种方式
1,acme.sh 方式 1)获取acme脚本 curl https://get.acme.sh | sh 2)开始获取证书 acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录 ...