[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 intACTION_COPY
          表示“复制”操作的 int 值。
static intACTION_COPY_OR_MOVE
          表示“复制”或“移动”操作的 int 值。
static intACTION_LINK
          表示“链接”操作的 int 值。
static intACTION_MOVE
          表示“移动”操作的 int 值。
static intACTION_NONE
          表示无操作的 int 值。
static intACTION_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 }  

 

转载于:https://www.cnblogs.com/yyf0309/p/5699552.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java Swing文件拖拽解析,您可以参考以下代码实现: ```java import javax.swing.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.io.*; public class FileDrop extends JPanel implements DropTargetListener { private DropTarget dropTarget; private JLabel message; public FileDrop() { setLayout(new BorderLayout()); message = new JLabel("拖拽文件到此区域"); message.setHorizontalAlignment(SwingConstants.CENTER); add(message, BorderLayout.CENTER); dropTarget = new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, this, true); } @Override public void dragEnter(DropTargetDragEvent dtde) {} @Override public void dragOver(DropTargetDragEvent dtde) {} @Override public void dropActionChanged(DropTargetDragEvent dtde) {} @Override public void dragExit(DropTargetEvent dte) {} @Override public void drop(DropTargetDropEvent dtde) { try { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable transferable = dtde.getTransferable(); DataFlavor[] flavors = transferable.getTransferDataFlavors(); for (DataFlavor flavor : flavors) { if (flavor.isFlavorJavaFileListType()) { Object data = transferable.getTransferData(flavor); if (data instanceof java.util.List) { java.util.List<File> files = (java.util.List<File>) data; for (File file : files) { System.out.println("文件路径:" + file.getAbsolutePath()); } } } } dtde.dropComplete(true); } catch (Exception e) { e.printStackTrace(); dtde.dropComplete(false); } } public static void main(String[] args) { JFrame frame = new JFrame("文件拖拽解析"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setLocationRelativeTo(null); frame.setContentPane(new FileDrop()); frame.setVisible(true); } } ``` 这是一个基于Java Swing实现的文件拖拽解析程序,您可以将文件拖拽窗口中间的区域,程序会将文件路径输出到控制台中。希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值