[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 拖拽文件();
     }

 }  
上一篇:【BZOJ4443】小凸玩矩阵(二分答案,二分图匹配)


下一篇:myeclipse 10创建maven项目