---
category: swing
folder: DragSource
title: FileをJavaアプリケーションからドロップ
tags: [DragAndDrop, File, DragGestureListener, TransferHandler]
author: aterai
pubdate: 2005-11-14T21:13:08+09:00
description: JavaアプリケーションからWindowsのデスクトップなどにFileをドロップします。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png
---
* Summary [#summary]
`Java`アプリケーションから`Windows`のデスクトップなどに`File`をドロップします。
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png)
* Source Code Examples [#sourcecode]
#code(link){{
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);
}
});
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは、ボタンで空の一時ファイルを生成し中央のラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動できます。
- `TransferHandler`が使用不可の`Java 1.5.0`などでは、以下のような`DragGestureListener`を使用する必要がある
#code{{
DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(
label, DnDConstants.ACTION_MOVE, new DragGestureListener() {
@Override public void dragGestureRecognized(DragGestureEvent e) {
File tmpFile = getFile();
if (Objects.isNull(tmpFile)) {
return;
}
DragSourceAdapter dsa = new DragSourceAdapter() {
@Override public void dragDropEnd(DragSourceDropEvent ev) {
if (ev.getDropSuccess()) {
clearFile();
}
}
};
e.startDrag(
DragSource.DefaultMoveDrop,
new TempFileTransferable(tmpFile),
dsa);
}
});
}}
* Reference [#reference]
- [http://opus-i.biz/ opus-i | シンプル素材 テンプレート 音楽素材]
* Comment [#comment]
#comment
#comment