java 拖拽目录_Java 7:如何在Java中实现拖放?

我正在尝试使用

Java 7 Update 21进行拖放.

我的目标操作系统是:

> Windows 7

> Ubuntu 12.04

> Mac OSX 10.6 / 10.8

要求是:

>从文件系统拖动文件并将其放到我的Java应用程序(制作一个

将文件复制到临时目录) – >适用于Linux& MacOSX&视窗

拖动Thunderbird的电子邮件并将其放到我的Java应用程序(保存)

他们作为完整的* .eml文件在文件系统上)

以下代码适用于我的Windows,MacOSX和Ubuntu应用程序的简单文件.另一个要求是将Thunderbird的电子邮件删除到我的Java应用程序(邮件自动转换为* .eml文件并存储到磁盘).这也适用于Windows,但是我在Ubuntu和MacOSX中得到了一个“Data Flavor not supported exception”

编辑:我在Ubuntu上尝试使用OpenJDK 7,但是即使是正常的文件丢失也不起作用.只有使用JDK版本的Oracle.

有人有一个想法如何修复/实现吗?

提前谢谢了!

这是一个简单的可执行示例:

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.DropTargetDropEvent;

import java.io.File;

import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.nio.file.StandardCopyOption;

import java.util.List;

public class DragDropTest extends javax.swing.JFrame {

public DragDropTest() {

initComponents();

initDragAndDrop();

}

private void initDragAndDrop() {

this.setDropTarget(new DropTarget(){

@Override

public synchronized void drop(DropTargetDropEvent dtde) {

try {

Transferable transfer = dtde.getTransferable();

if(transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {

dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

List objects = (List)transfer.getTransferData(DataFlavor.javaFileListFlavor);

for(Object object : objects) {

if(object instanceof File) {

File source = (File)object;

File dest = new File(System.getProperty("user.home")+File.separator+source.getName());

Files.copy(Paths.get(source.getAbsolutePath()),Paths.get(dest.getAbsolutePath()),StandardCopyOption.REPLACE_EXISTING);

System.out.println("File copied from "+source.getAbsolutePath()+" to "+dest.getAbsolutePath());

}

}

} else if(transfer.isDataFlavorSupported(DataFlavor.stringFlavor)) {

dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

String type = (String)transfer.getTransferData(DataFlavor.stringFlavor);

System.err.println("Data flavor not supported: "+type);

} else {

System.err.println("Data flavor not supported.");

}

} catch(UnsupportedFlavorException ex) {

System.err.println(ex.getMessage());

} catch(IOException ex) {

System.err.println(ex.getMessage());

} catch(Exception ex) {

System.err.println(ex.getMessage());

} finally {

dtde.dropComplete(true);

}

}

});

}

@SuppressWarnings("unchecked")

private void initComponents() {

setDefaultCloSEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("Drag & Drop");

setResizable(false);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0,200,Short.MAX_VALUE)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0,Short.MAX_VALUE)

);

pack();

}

public static void main(String args[]) {

new DragDropTest().setVisible(true);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值