DropTargetは、ファイル等をドロップしたときの処理を記述する為のクラス。
(ファイルだけでなく、他コンポーネントからのドラッグによるドロップを受け付ける)
ただし、Swingのコンポーネント(JTree等)でドロップを処理したいなら、TransferHandlerを使う方が良い。[2009-03-26]
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDropEvent;
class HteDropTarget extends DropTarget { public void drop(DropTargetDropEvent dtde) { Transferable t = dtde.getTransferable(); if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { dtde.acceptDrop(DnDConstants.ACTION_REFERENCE); try { List list = (List)t.getTransferData(DataFlavor.javaFileListFlavor); for (int i = 0; i < list.size(); i++) { File f = (File) list.get(i); 〜 // fを使ってファイルを処理する } } catch (Exception e) { throw new RuntimeException(e); } } } }
このクラスのインスタンスを、ドロップを受け付けたいコンポーネントに登録する。
private void initPane(Container c) { JEditorPane editor = new JEditorPane(); 〜 editor.setDropTarget(new HteDropTarget()); 〜 c.add(editor); }
これで、JEditorPaneにファイルがドロップされたときにdrop()が呼び出される。