swt实现文件拖动触发事件DropTarget

 DropTarget dropTarget = new DropTarget(fileComposite, DND.DROP_NONE);
        // 2.设置传输的数据类型
        dropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() });

        dropTarget.addDropListener(new DropTargetAdapter() {
            @Override
            public void dragEnter(DropTargetEvent event) {
                // 光标进入目标对象区域时触发的事件
                if (event.detail == DND.DROP_DEFAULT) {
                  event.detail = DND.DROP_MOVE;
                }
            }

			 @Override
            public void drop(DropTargetEvent event) {
                //一个任务正在上传的时候只能关闭本页面然后在打开报送页面进行多次上传
                if(btn_submit.getData() !=null && btn_submit.getData().equals("1")) {
                    MessageDialog.openError(shell, "错误:", "当前有文件正在上传,请关闭上报页面重新打开报送页面进行上传!");
                    return;
                }
                
                // 拖放完成后触发的事件
                if (FileTransfer.getInstance().isSupportedType(event.currentDataType)) {
                    String[] filePathArrays = (String[]) event.data;
                }
          	}

	});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现文件拖拽上传可以参考以下代码: ```java import javax.swing.*; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.*; import java.io.File; import java.util.List; public class FileDragAndDrop extends JFrame { private JTextArea textArea; public FileDragAndDrop() { setTitle("File Drag and Drop"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(400, 400); JPanel panel = new JPanel(new BorderLayout()); textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); panel.add(scrollPane, BorderLayout.CENTER); // 添加文件拖拽监听器 DropTarget dropTarget = new DropTarget(textArea, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() { @Override public void drop(DropTargetDropEvent event) { try { event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable transferable = event.getTransferable(); if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { List<File> fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor); for (File file : fileList) { // 在文本域中显示文件名 textArea.append(file.getName() + "\n"); } } } catch (Exception e) { e.printStackTrace(); } } }); textArea.setDropTarget(dropTarget); setContentPane(panel); setVisible(true); } public static void main(String[] args) { new FileDragAndDrop(); } } ``` 在这个例子中,我们使用了 `JTextArea` 作为拖拽目标,当用户拖拽文件到文本域中时,程序会将文件名添加到文本域中。如果需要将文件内容传递给另一个类,可以在 `drop` 方法中获取文件内容并将其传递给另一个类的方法。 下面是一个示例代码,用于将文件内容传递给另一个类: ```java import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; public class FileReceiver { public static void receive(File file) throws IOException { String content = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); System.out.println(content); } } ``` 在 `drop` 方法中调用 `FileReceiver.receive(file)` 方法即可将文件内容传递给另一个类。完整代码如下: ```java import javax.swing.*; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.*; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.List; public class FileDragAndDrop extends JFrame { private JTextArea textArea; public FileDragAndDrop() { setTitle("File Drag and Drop"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(400, 400); JPanel panel = new JPanel(new BorderLayout()); textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); panel.add(scrollPane, BorderLayout.CENTER); // 添加文件拖拽监听器 DropTarget dropTarget = new DropTarget(textArea, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() { @Override public void drop(DropTargetDropEvent event) { try { event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable transferable = event.getTransferable(); if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { List<File> fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor); for (File file : fileList) { // 在文本域中显示文件名 textArea.append(file.getName() + "\n"); // 将文件内容传递给另一个类 FileReceiver.receive(file); } } } catch (Exception e) { e.printStackTrace(); } } }); textArea.setDropTarget(dropTarget); setContentPane(panel); setVisible(true); } public static void main(String[] args) { new FileDragAndDrop(); } } class FileReceiver { public static void receive(File file) throws IOException { String content = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); System.out.println(content); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值