至于这个问题,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]接受拖拽文件的窗口的更多相关文章

  1. 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 注 ...

  2. window响应拖拽文件操作

    window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...

  3. Unity输出PC端(Windows) 拖拽文件到app中

    需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...

  4. 解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件

    在Duilib中集成CEF浏览器项目实际开发中,遇到一个问题. 一个需求从资源管理器(桌面)拖拽文件到客户端,窗口捕获WM_DROPFILES消息然后进行消息处理,但客户区是集成的CEF浏览器,浏览器 ...

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

    #include <ShlObj.h> BOOL SimulateDropFile(CString strFilePath) { }; wcstombs(szFile, strFilePa ...

  6. Java实现拖拽上传

    原文:http://www.open-open.com/code/view/1437358795584 在项目开发中由于实际需求,需要开发拖拽上传的功能,ok! 先看效果图: jsp上传前端代码: & ...

  7. vm虚拟机Kali无法拖拽文件解决办法

    vm虚拟机Kali无法拖拽文件解决办法 apt-get updateapt-get install open-vm-tools-desktop fusereboot

  8. Winform程序拖拽文件到窗体

    1:首先需要将接收拖拽的窗体属性AllowDrop设置为True. 2:编写窗体拖拽进入(DragEnter)和拖拽完成(DragDrop)事件. private void FrmCode_DragE ...

  9. html5实现拖拽文件上传

    以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...

随机推荐

  1. ldapsearch使用

    参数 用途 -? 打印关于使用 ldapsearch 的帮助. -a deref 指定别名反向引用.请输入 never.always.search 或 find.如果不使用此参数,缺省为 never. ...

  2. grafana,graphite,influxdb with docker

    ++++++++++++++++++++++++ sudo docker pull tutum/influxdb sudo docker run -d -p 8083:8083 -p8086:8086 ...

  3. 数据库管理系统的ACID特性

    数据库管理系统(DBMS)的事务都遵循着四种标准规格的约定.将这四种特性的首字母结合起来就统称为ACID特性.这些约定是所有DBMS都必须遵守的规则. 原子性 原子性是指在事务结束时,其中所包含的更新 ...

  4. centos7 卸载和安装最新版本docker-ce,配置阿里云加速

    一.yum卸载.安装 1.卸载老版本的 docker 及其相关依赖 sudo yum remove docker docker-common container-selinux docker-seli ...

  5. python center() 函数

    center Python center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串.默认填充字符为空格. 语法 center()方法语法: str.center(widt ...

  6. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  7. MySQL字符集的一个坑

    MySQL字符集的一个坑 http://imysql.com/2013/10/29/misunderstand-about-charset-handshake.shtml MySQL字符集的一个坑 1 ...

  8. layer,一个可以让你想到即可做到的javascript弹窗(层)解决方案

    学习网址:http://layer.layui.com/ 下载地址:http://res.layui.com/download/layer-v2.1.zip 我们提到的基础参数主要指调用方法时用到的配 ...

  9. ShuffleElements(随机打乱数组中的元素)

    给定一个数组,随机打乱数组中的元素,题意很简单直接上代码: package Array; import java.util.Arrays; import java.util.Collections; ...

  10. CXF创建webservice客户端和服务端

    转 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.C ...