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);
}
}
總結
以上是生活随笔為你收集整理的java 拖拽目录_Java 7:如何在Java中实现拖放?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java mysql 触发器 存储过程_
- 下一篇: java 类一定要声明成public_类