[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 实现,所以是实现接口的时候就比较方便

下面给出一个简单的接受拖拽文件的程序的源代码:

 1 package 图形界面;
 2
 3 import javax.swing.*;
 4 import java.util.List;
 5 import java.awt.*;
 6 import java.awt.datatransfer.DataFlavor;
 7 import java.awt.datatransfer.UnsupportedFlavorException;
 8 import java.awt.dnd.*;
 9 import java.io.File;
10 import java.io.IOException;
11
12 /**
13  * @author Administrator
14  */
15 public class 拖拽文件 extends JFrame{
16
17     private static final long serialVersionUID = -3081282189290446349L;
18
19     private JTextArea jta;
20     private JScrollPane jsp;
21
22
23     private void init_drop(){
24
25         new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() {
26
27             @Override
28             public void drop(DropTargetDropEvent dtde) {
29
30                 if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){    //判断是否支持此文件的格式
31
32                     dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);    //接受该文件
33                     try {
34                         @SuppressWarnings("unchecked")
35                         List<File> list = (List<File>) dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
36                         jta.setText(jta.getText()+list.get(list.size() - 1).getAbsolutePath() + "\r\n");
37
38                     } catch (UnsupportedFlavorException | IOException e) {
39                         e.printStackTrace();
40                     }
41
42                 }else{
43                     dtde.rejectDrop();            //拒绝该拖拽文件
44                 }
45
46             }
47
48         });
49
50     }
51
52     private void init(){
53
54         jta = new JTextArea();
55         jsp = new JScrollPane(jta);
56
57         jsp.setBounds(30, 30, 200, 200);
58         jta.setForeground(Color.green);
59         jta.setRows(40);
60
61     }
62
63     public 拖拽文件(){
64
65         this.init();
66         this.setTitle("拖拽文件测试");
67         this.setLayout(null);
68         this.add(jsp);
69         this.init_drop();
70         this.setBounds(420, 280, 300, 320);
71         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
72         this.setResizable(false);
73         this.setVisible(true);
74
75     }
76
77     public static void main(String args[]){
78         new 拖拽文件();
79     }
80
81 }  
时间: 2024-12-22 00:47:49

[Java]接受拖拽文件的窗口的相关文章

atitit.D&amp;D drag&amp;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 注解事件 document.dragover >>preventDefault 1 3. 代码(js) 1 4. C++ 实现拖曳 2 5. QT拖拽功能简介 - pcsuite的专栏 - 博客频道 - CSDN.NET.htm 2 1. DND的操作流程 Dragenter 事件::更改提示的颜色

Java实现拖拽上传

原文:http://www.open-open.com/code/view/1437358795584 在项目开发中由于实际需求,需要开发拖拽上传的功能,ok! 先看效果图: jsp上传前端代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html>

c++ 发送消息,模拟拖拽文件

1 #include <ShlObj.h> 2 BOOL SimulateDropFile(CString strFilePath) 3 { 4 char szFile[MAX_PATH] = {0}; 5 wcstombs(szFile, strFilePath.GetBuffer(0), _MAX_PATH); 6 DWORD dwBufSize = sizeof(DROPFILES) + strlen(szFile) + 1; 7 8 //通过类名或窗口标题 找到接受拖拽的窗口 9 HW

JAVA UI 拖拽功能

java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持他们有dragEnabled属性.这些JComponent包括:javax.swing.JColorChooserjavax.swing.JFileChooserjavax.swing.JListjavax.swing.JTablejavax.swing.JTreejavax.swing.text.JTextComponent 大部分的控件不支持没有这个属性,尤其是常用的jpanel和jframe. 一种简单的方法

A1.xcode三种拖拽文件夹的方式

1.copy,是指文件不在项目的目录下面,例如项目在桌面上,文件在 Download 下,你 copy 就会被复制到项目里面.如果文件原本就在项目里面,则不执行任何操作.这里不管它,重点是 下面的单选框. 2.create  groups for any added folders 添加文件 将所有文件放在添加的目录下,实际文件目录结构忽略 访问时 直接文件名即可 黄色文件夹:编译后,资源文件在 mainBundle 中,源代码程序需要通过这种方式拖拽添加 需要注意不能出现重名的文件 效率高 拖

UAC相关问题分析--使用管理员权限打开VisualStudio,无法访问网络磁盘,无法拖拽文件

搬运自http://wurang.me/2014/06/17/uac-problems.html [问题产生] 问题最初是在administrator权限下,visual studio 打开网络磁盘下的文件报错.经过几次调试,最终发现是问题是在管理员权限下,vs无法访问网络磁盘. Console.Write( System.IO.File.Exists(path)); 该结果返回False.为了确认是由于权限问题引起,使用非管理员权限打开vs,运行上面的程序,结果返回True. 至此问题确立:w

H5中的拖拽文件上传

一:介绍 1.内容摘要 2.主要设计的技术 3.drag与drop事件 4.drag与drop的部分重要代码 5.File Api 6.formData 二:程序演示 1. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>无标题文档</title> 6 <script src="D:\jquery\jquer

HTML5开发 拖拽文件上传

Drag&Drop 拖拽功能的处理 关于HTML5拖拽文件上传,其实国外已经有很多网站有这样的应用,最早推出拖拽上传应用的是 Gmail,它支持标准浏览器下拖拽本地文件到浏览器中作为邮件的附件发送,但其实现在利用HTML5的功能实现,主要借助于新版支持的浏览器来实现,IE还是弱很多. 拖拽上传应用主要使用了以下 HTML5技术: Drag&Drop : HTML5基于拖拽的事件机制.File API : 可以很方便的让 Web 应用访问文件对象,File API 包括FileList.Bl

解决往监控目录拖拽文件夹无法监控到的问题

在项目中一个应用场景是监控一个目录变化,但从监控目录外部拖拽一个文件夹进来,拖拽进来的文件夹里的文件无法监控到,通过查看资料,发现是一个参数的设置 #include <iostream> #include "DirectoryChanges.h" #include "MyDirectoryChangeHandler.h" int main() { wcout.imbue(locale("CHS")); CDirectoryChange