[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 ...
随机推荐
- intel笔记本cpu型号后缀详解(M,U,QM,MQ,HQ,XM)
M:笔记本专用CPU,一般为双核,M前面一位数字是0,意味着是标准电压处理器,如果是7,则是低电压处理器. U:笔记本专用低电压CPU,一般为双核,U前面一位数字为8,则是28W功耗的低压处理器(标准 ...
- idea导出war包并在tomcat上部署
生成war包 (一)进入项目配置页面 然后到达: (二)选择 设置好路径 然后apply (三)生成 然后再指定的目录就可以看见war包了. 部署到tomcat上 (一)将war包拷贝到tomcat的 ...
- Best Cow Line---poj3617(贪心)
题目链接:http://poj.org/problem?id=3617 题意:有n头牛.刚开始有一个序列.现在想要重新排列.每次从原始的序列头部和尾部取出一个取出一个放到新的序列尾部.最后使得得到的新 ...
- 共享访问在.NET中的编程实现
转载:http://blog.csdn.net/zhzuo/article/details/1732937 共享访问在.NET中的编程实现 发布日期:2007-08-08 | 更新日期:2009-03 ...
- Java学习之路-Spring的HttpInvoker学习
Hessian和Burlap都是基于HTTP的,他们都解决了RMI所头疼的防火墙渗透问题.但当传递过来的RPC消息中包含序列化对象时,RMI就完胜Hessian和Burlap了. 因为Hessian和 ...
- 订阅号助手App发布 手机也能管理公众号了
盼着许久的微信订阅号助手app终于发布了!“ 微信团队发布「订阅号助手」App,支持公众号运营者在手机上发表内容.查看和回复消息.管理已关注用户和帐号.暂时只支持iOS平台,Android平台敬请期待 ...
- VUX
1.mapState 2.mapGetters 3. 4. 当你的操作行为中含有异步操作,比如向后台发送请求获取数据,就需要使用action的dispatch去完成.其他使用commit即可. 举个例 ...
- 非受限联合体 - 现代C++新特性总结
非受限联合体 非受限联合体:C++98中并不是所有数据类型都能够成为union的数据成员,不允许联合体拥有非POD(Plain Old Data).静态或引用类型的成员. C++11中取消了联合体对于 ...
- 虚拟机VMware的网络设置出了问题会导致很多莫名的错误
邪门地CentOS内软件安装失败问题:Xshell与虚拟机的各种连接失败:CentOS下eth0没显示ip地址. 这些原因竟然是一个,虚拟机VMware的网络设置出了问题. 恢复初始设置即可.
- [py]django上线部署-uwsgi+nginx+py3/django1.10
https://github.com/lannyMa/django-uwsgi-nginx.git 单机调试启动-确保项目代码没问题 - 克隆代码进入项目 git clone https://gith ...