为了方便,有时我们需要直接将本地文件或字符或图片直接拖拽到图形上,让组件自动打开拖拽的文件。基于这种思想,我写了如下代码实现这个拖拽监听的功能。
1.UI源码
package ibees.desktop;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
/**
*
* @author zhang xiaojin
* 演示Swing文件拖拽
*/
public class DropDragDemo {
public static void main(String[] args){
JFrame frame = new JFrame("文件拖拽Demo");
frame.setSize(500, 400);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder("文件拖拽演示"));
JTextArea textArea = new DropDragSupportTextArea();
JScrollPane jsp = new JScrollPane();
jsp.setViewportView(textArea);
textArea.setColumns(40);
textArea.setRows(20);
panel.add(jsp);
frame.add(panel);
frame.setVisible(true);
}
}
这段源码的效果如下:里面的两个文件名是我拖拽进去的。
2.实现监听的类
package ibees.desktop;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.JTextArea;
/**
*
* @author Administrator
*/
public class DropDragSupportTextArea extends JTextArea implements DropTargetListener{
private DropTarget dropTarget