package com.example.drag;
import java.awt.GridLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
/**
* 文件拖拽选择示例
*
* @author jianggujin
*/
@SuppressWarnings("serial")
public class DragDemo extends JFrame {
public DragDemo() {
super("DragDemo");
final JTextArea area = new JTextArea();
area.setLineWrap(true);
JScrollPane jScrollPane = new JScrollPane(area);
jScrollPane.setSize(200, 200);
JFrame jf = new JFrame("中国通关查询接口"); // 创建窗口
jf.add(jScrollPane);
//add(jScrollPane);
JPanel panel3 = new JPanel(); // 创建面板容器,使用默认的布局管理器
// 创建一个按钮,点击后获取文本框中的文本
JButton btn = new JButton("清除");
//btn.setFont(new Font(null, Font.PLAIN, 20));
panel3.add(btn);
jf.add(panel3);
new DropTarget(area, DnDConstants.ACTION_COPY_OR_MOVE,
new DropTargetAdapter() {
@Override
public void drop(DropTargetDropEvent dtde) {
try {
// 如果拖入的文件格式受支持
if (dtde
.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
// 接收拖拽来的数据
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
@SuppressWarnings("unchecked")
List<File> list = (List<File>) (dtde.getTransferable()
.getTransferData(DataFlavor.javaFileListFlavor));
//area.append("");
for (File file : list) {
area.append(file.getAbsolutePath());
area.append("\r\n");
}
// 指示拖拽操作已完成
dtde.dropComplete(true);
} else {
// 拒绝拖拽来的数据
dtde.rejectDrop();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
jf.setSize(500, 350); // 设置窗口大小
jf.setLocationRelativeTo(null); // 把窗口位置设置到屏幕中心
jf.setLayout(new GridLayout(4, 10));
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)
jf.setVisible(true);
//监听按钮
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = area.getText();
String[] split = text.split("\r\n");
for (String s : split) {
System.out.println("path is " + s);
}
area.setText("");
}
});
}
public static void main(String[] args) {
new DragDemo();
}
}
awt 选择文件的方式是使用文件选择框,但是这种方式在操作起来很麻烦,很多人在操作的时候喜欢直接使用鼠标拖拽,今天就为大家演示一下JAVA中如何实现直接用鼠标拖拽文件选择。
基本思想是:
将文件或文件夹拖拽到聊天对话框后,
释放鼠标激活drop事件后,
可以得到被选择的文件或文件夹的信息,
以便进行数据的传输。