---
category: swing
folder: FileListFlavor
title: Fileのドラッグ&ドロップ
tags: [DragAndDrop, JTable, DropTargetListener, TransferHandler]
author: aterai
pubdate: 2005-06-20T11:06:07+09:00
description: WindowsなどからファイルをJTableにドラッグ&ドロップします。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMhxsIIsI/AAAAAAAAAZU/iZ6Pn8yTFFM/s800/FileListFlavor.png
---
* Summary [#summary]
`Windows`などからファイルを`JTable`にドラッグ&ドロップします。
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMhxsIIsI/AAAAAAAAAZU/iZ6Pn8yTFFM/s800/FileListFlavor.png)
* Source Code Examples [#sourcecode]
#code(link){{
FileModel model = new FileModel();
JTable table = new JTable(model);
DropTargetListener dtl = new DropTargetAdapter() {
@Override public void dragOver(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
return;
}
dtde.rejectDrag();
}
@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);
}}
* Description [#explanation]
* Description [#description]
- `Windows`のファイルエクスプローラなどからファイルを選択(複数選択可)、ドラッグ、`JTable`上にドロップでファイル名などを一覧表示
- ドロップされた`DataFlavor`が`DataFlavor.javaFileListFlavor`の場合のみ、これをファイルとして処理する`DropTargetListener`を作成
- `JDK 1.6.0`以降では以下のような`TransferHandler`が使用可能
-- [[JTableでファイルとディレクトリを別々にソート>Swing/FileDirectoryComparator]]に移動
* Reference [#reference]
- [http://www5.big.or.jp/~tera/Labo/Java2/j2dnd.html Java2: WindowsからのDrag and Drop]
- [http://www.ne.jp/asahi/j.nihei/personal/linuxDragDrop.html java drag and drop]
- [[JTable自体の高さを拡張>Swing/FillsViewportHeight]]
* Comment [#comment]
#comment
#comment