FileをJavaアプリケーションからドロップ
Total: 12907
, Today: 2
, Yesterday: 8
Posted by aterai at
Last-modified:
概要
Java
アプリケーションからWindows
のデスクトップなどにFile
をドロップします。
Screenshot

Advertisement
サンプルコード
class MyDragGestureListener implements DragGestureListener {
@Override public void dragGestureRecognized(DragGestureEvent dge) {
File tmpfile = getFile();
if (tmpfile == null) {
return;
}
Transferable tran = new Transferable() {
@Override public Object getTransferData(DataFlavor flavor) {
ArrayList al = new ArrayList(1);
al.add(tmpfile);
return al;
}
@Override public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor };
}
@Override public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(DataFlavor.javaFileListFlavor);
}
};
DragSourceAdapter dsa = new DragSourceAdapter() {
@Override public void dragDropEnd(DragSourceDropEvent dsde) {
if (dsde.getDropSuccess()) {
clearFile();
}
}
};
dge.startDrag(DragSource.DefaultMoveDrop, tran, dsa);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ボタンで空の一時ファイルを生成し中央のラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動できます。
- 以下のような
TransferHandler
(Java 1.6.0
以上)を使用する方法もあるlabel.setTransferHandler(new TransferHandler() { @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } @Override protected Transferable createTransferable(JComponent c) { File tmpfile = getFile(); if (tmpfile == null) { return null; } else { return new TempFileTransferable(tmpfile); } } @Override protected void exportDone(JComponent c, Transferable d, int a) { cleanup(c, a == MOVE); } private void cleanup(JComponent c, boolean removeFile) { if (removeFile) { clearFile(); c.repaint(); } } }); label.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { System.out.println(e); JComponent c = (JComponent) e.getSource(); c.getTransferHandler().exportAsDrag(c, e, TransferHandler.COPY); } });