Javaでファイルのドラッグ・アンド・ドロップ:メモ

Javaでファイルのドラッグ&ドロップを行う
Javaによる画面でのファイルドラッグ&ドロップ処理です。
画面にファイルをドラッグすると、ファイル名を取得し、表示します。
DropTargetAdapterクラスの派生を作成し、
DropTargetインスタンス生成で
画面要素と連結します。
ドラッグ&ドロップイベント発生時にDropTargetAdapterクラスの派生のdrop関数
が呼ばれます。drop関数内でおまじないを唱えると
ファイルのリストが得られます。
// DropTest.java import javax.swing.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.io.*; // ドロップターゲットでドロップ情報を受け取るクラス class MyDropTargetAdapter extends DropTargetAdapter { DropTest win; MyDropTargetAdapter(DropTest win_){win=win_;} public void drop(DropTargetDropEvent e) { try { Transferable t = e.getTransferable(); if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); @SuppressWarnings("unchecked") java.util.List<File> fileList = (java.util.List<File>) (t.getTransferData(DataFlavor.javaFileListFlavor)); win.setFileNames(fileList); } } catch(Exception ex){ex.printStackTrace(System.err);} } } // メインのウィンドウ public class DropTest extends JFrame { private JTextArea textArea; public static void main(String[] args) { DropTest win = new DropTest(); win.pack(); win.setVisible(true); } public DropTest() { super("DropTest:下の領域にファイルをドロップしてください"); Container con = getContentPane(); textArea = new JTextArea(10, 50); con.add(textArea); new DropTarget(textArea,new MyDropTargetAdapter(this)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void setFileNames(java.util.List<File> fileList) { StringBuilder sb = new StringBuilder(); for (File file:fileList) { sb.append(file.getAbsolutePath()).append("\n"); } textArea.setText(sb.toString()); } }
本質外の要素を幾つか説明します。
- @SuppressWarnings("unchecked")はObjectをcastする場合の警告を出さなくする指定です
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)は[×]で終了するようにする指定です
- win.pack()は画面のサイズを内容のサイズに合わせる指定です
サンプルのダウンロード
コピペで充分だとも思いますが、念のため DropTest.zip にプログラムとantのbuildファイル、ant起動バッチファイルを 用意しました。
A00_clean.bat : 二次ファイルを消去する(単純なant呼び出しです)
A01_build.bat : ビルドする(単純なant呼び出しです)
A05_run.bat : 起動する(単純なant呼び出しです)
A10_test.bat : ビルドし起動する(単純なant呼び出しです)
build.xml : ANTのビルドファイル
DropTest.java : プログラムファイル
| 固定リンク