Swing/FileListFlavor のバックアップの現在との差分(No.5)
TITLE:Fileのドラッグ&ドロップ
Fileのドラッグ&ドロップ
編集者:Terai Atsuhiro~
作成日:2005-06-20
更新日:2022-03-06 (日) 07:26:05
概要
Windows
などからファイルをJTable
にドラッグ&ドロップします。
Screenshot
Advertisement
概要
WidnowsなどからファイルをJTableにドラッグ&ドロップします。サンプルコード
#spanend
#spanadd
FileModel model = new FileModel();
#spanend
#spanadd
JTable table = new JTable(model);
#spanend
#spanadd
DropTargetListener dtl = new DropTargetAdapter() {
#spanend
@Override public void dragOver(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
return;
}
dtde.rejectDrag();
}
#spandel
#screenshot
#spanend
@Override public void drop(DropTargetDropEvent dtde) {
try {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrop(DnDConstants.ACTION_COPY);
Transferable transferable = dtde.getTransferable();
List list = (List) transferable.getTransferData(
DataFlavor.javaFileListFlavor);
for (Object o: list) {
if (o instanceof File) {
File file = (File) o;
model.addFileName(
new FileName(file.getName(), file.getAbsolutePath()));
}
}
dtde.dropComplete(true);
return;
}
} catch (UnsupportedFlavorException | IOException ex) {
ex.printStackTrace();
}
dtde.rejectDrop();
}
#spanadd
};
#spanend
#spanadd
new DropTarget(table, DnDConstants.ACTION_COPY, dtl, true);
#spanend
#spanadd
View in GitHub: Java, Kotlinサンプルコード
DropTargetListener dtl = new DropTargetAdapter() { public void dragOver(DropTargetDragEvent dtde) { if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { dtde.acceptDrag(DnDConstants.ACTION_COPY); return; } dtde.rejectDrag(); } public void drop(DropTargetDropEvent dtde) { try { if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { dtde.acceptDrop(DnDConstants.ACTION_COPY); Transferable t = dtde.getTransferable(); java.util.List list = (java.util.List)t.getTransferData( DataFlavor.javaFileListFlavor); java.util.Iterator i = list.iterator(); while(i.hasNext()) { File file = (File) i.next(); model.addTest(new Test(file.getName(), file.getAbsolutePath())); } dtde.dropComplete(true); return; } }catch(UnsupportedFlavorException ufe) { ufe.printStackTrace(); }catch(IOException ioe) { ioe.printStackTrace(); } dtde.rejectDrop(); } }; DropTarget dt = new DropTarget(tbl,DnDConstants.ACTION_COPY,dtl,true);
解説
-
Windows
のファイルエクスプローラなどからファイルを選択(複数選択可)、ドラッグ、JTable
上にドロップでファイル名などを一覧表示 - ドロップされた
DataFlavor
がDataFlavor.javaFileListFlavor
の場合のみ、これをファイルとして処理するDropTargetListener
を作成 -
JDK 1.6.0
以降では以下のようなTransferHandler
が使用可能
- &jar;
- &zip;