Swing/FileListFlavor のバックアップの現在との差分(No.18)
- category: swing folder: FileListFlavor title: Fileのドラッグ&ドロップ tags: [DragAndDrop, JTable, DropTargetListener, TransferHandler] author: aterai pubdate: 2005-06-20 pubdate: 2005-06-20T11:06:07+09:00 description: WindowsなどからファイルをJTableにドラッグ&ドロップします。 image:
概要
Windows
などからファイルをJTable
にドラッグ&ドロップします。
Screenshot
Advertisement
サンプルコード
#spandel
final FileModel model = new FileModel();
#spanend
#spandel
final JTable table = new JTable(model);
#spanend
#spanadd
FileModel model = new FileModel();
#spanend
#spanadd
JTable table = new JTable(model);
#spanend
DropTargetListener dtl = new DropTargetAdapter() {
@Override public void dragOver(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
return;
}
dtde.rejectDrag();
}
#spanadd
#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();
}
};
new DropTarget(table, DnDConstants.ACTION_COPY, dtl, true);
View in GitHub: Java, Kotlin解説
Windows
のエクスプローラなどからファイルを選択(複数可)し、上記のサンプルアプリ上にドラッグ&ドロップするとファイル名などをJTable
に表示しています。
-
Windows
のファイルエクスプローラなどからファイルを選択(複数選択可)、ドラッグ、JTable
上にドロップでファイル名などを一覧表示 - ドロップされた
DataFlavor
がDataFlavor.javaFileListFlavor
の場合のみ、これをファイルとして処理するDropTargetListener
を作成 -
JDK 1.6.0
以降では以下のようなTransferHandler
が使用可能
DataFlavor
が、DataFlavor.javaFileListFlavor
の場合だけ、これをファイルとして処理するDropTargetListener
を作成しています。
- -
JDK 1.6.0
以降なら、以下のようなTransferHandler
を作成して使用する方法もあります。
#spanend
#spandel
table.setDropMode(DropMode.INSERT_ROWS);
#spanend
#spandel
table.setTransferHandler(new FileTransferHandler());
#spanend
#spandel
#spanend
#spandel
class FileTransferHandler extends TransferHandler {
#spanend
@Override public boolean importData(TransferSupport support) {
try {
if (canImport(support)) {
JTable table = (JTable) support.getComponent();
DefaultTableModel model = (DefaultTableModel) table.getModel();
for (Object o: (List) support.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor)) {
if (o instanceof File) {
File f= (File) o;
model.addRow(new Object[] { f, f.length(), f.getAbsolutePath() });
}
}
return true;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
@Override public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
#spandel
}
#spanend
#spandel