Swing/DragSource のバックアップの現在との差分(No.4)
FileをJavaアプリケーションからドロップ
編集者:Terai Atsuhiro~
作成日:2005-11-14
更新日:2024-01-19 (金) 11:21:43
概要
Java
アプリケーションからWindows
のデスクトップなどにFile
をドロップします。
概要
JavaアプリケーションからWindowsのデスクトップなどにFileをドロップします。Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
label.setTransferHandler(new TransferHandler() {
#spanend
@Override public int getSourceActions(JComponent c) {
return TransferHandler.COPY_OR_MOVE;
}
#spandel
**サンプルコード [#nad9512e]
#spanend
class MyDragGestureListener implements DragGestureListener {
public void dragGestureRecognized(DragGestureEvent dge) {
final File tmpfile = getFile();
if(tmpfile==null) {
return;
}
Transferable tran = new Transferable() {
public Object getTransferData(DataFlavor flavor) {
ArrayList al = new ArrayList(1);
al.add(tmpfile);
return al;
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(DataFlavor.javaFileListFlavor);
}
};
DragSourceAdapter dsa = new DragSourceAdapter() {
public void dragDropEnd(DragSourceDropEvent dsde) {
if(dsde.getDropSuccess()) {
clearFile();
}
}
};
dge.startDrag(DragSource.DefaultMoveDrop, tran, dsa);
}
}
@Override protected Transferable createTransferable(JComponent c) {
File tmpfile = getFile();
if (tmpfile == null) {
return null;
} else {
return new TempFileTransferable(tmpfile);
}
}
#spandel
//-[[サンプルを起動>http://terai.xrea.jp/swing/dragsource/sample.jnlp]]
#spanend
-[[jarファイル>http://terai.xrea.jp/swing/dragsource/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/dragsource/src.zip]]
@Override protected void exportDone(JComponent c, Transferable d, int a) {
cleanup(c, a == MOVE);
}
#spandel
**解説 [#z58c49a2]
#spanend
#spandel
上記のサンプルでは、ボタンで空の一時ファイルを生成し、ラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動することが出来ます。
#spanend
private void cleanup(JComponent c, boolean removeFile) {
if (removeFile) {
clearFile();
c.repaint();
}
}
#spanadd
});
#spanend
#spanadd
label.addMouseListener(new MouseAdapter() {
#spanend
@Override public void mousePressed(MouseEvent e) {
System.out.println(e);
JComponent c = (JComponent) e.getSource();
c.getTransferHandler().exportAsDrag(c, e, TransferHandler.COPY);
}
#spanadd
});
#spanend
#spanadd
View in GitHub: Java, KotlinDragSource dragSource = DragSource.getDefaultDragSource(); dragSource.createDefaultDragGestureRecognizer(label, DnDConstants.ACTION_MOVE, new MyDragGestureListener());
解説
上記のサンプルでは、ボタンで空の一時ファイルを生成し中央のラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動できます。参考リンク
コメント
-
TransferHandler
が使用不可のJava 1.5.0
などでは、以下のようなDragGestureListener
を使用する必要がある
#spanend
#spanadd
DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(
#spanend
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);
}
#spanadd
});
#spanend
#spanadd