java-swing文件拖拽路径识别

qsuron 发布于 2014-02-19 Java 21 次阅读 无~ 251 字 预计阅读时间: 1 分钟


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

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

主要是用到了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请回复支持一下,谢谢!