java-swing文件拖拽路径识别

文件拖拽识别是非常常用也非常实用的一个小功能

日常的应用如果需要操作到文件,每一次都用浏览文件来添加的话是非常麻烦的,而下面这种方法则可以用文件的拖拽来获取路径

主要是用到了DropTargetAdapter类,源代码如下:

import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.util.*;
import java.io.File;
public class JavaFileDragDrop extends JFrame
{
    JTextArea jta;
    public JavaFileDragDrop()
    {
        this.setTitle("java file drag and drop test");
        this.setBounds(150,150,300,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(null);
        jta=new JTextArea();

        DropTargetAdapter kgd=new DropTargetAdapter()
        {
            public void drop(DropTargetDropEvent dtde)
            {
                try
                {
                    Transferable tf=dtde.getTransferable();
                    if(tf.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
                    {
                        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                        List lt=(List)tf.getTransferData(DataFlavor.javaFileListFlavor);
                        Iterator itor=lt.iterator();
                        while(itor.hasNext())
                        {
                            File f=(File)itor.next();
                            jta.setText(jta.getText()+"n"+f.getAbsolutePath());
                        }
                        dtde.dropComplete(true);
                     }
                     else
                     {
                        dtde.rejectDrop();
                     }
                 }
                 catch(Exception e)
                 {
                     e.printStackTrace();
                 }
              }
        };

        new DropTarget(jta,DnDConstants.ACTION_COPY_OR_MOVE,kgd);

        jta.setBounds(30,30,250,250);
        this.add(jta);
        this.setVisible(true);
    }
    public static void main(String[] args)
    {
        new JavaFileDragDrop();
    }
}

如果Copy请回复支持一下,谢谢!