« ◆三鷹の北極星とMitakaの北極星 | トップページ | ◆青物横丁品川灯台複製の方位表示:NEOS »

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

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 : プログラムファイル

|

« ◆三鷹の北極星とMitakaの北極星 | トップページ | ◆青物横丁品川灯台複製の方位表示:NEOS »

トラックバック


この記事へのトラックバック一覧です: Javaでファイルのドラッグ・アンド・ドロップ:メモ:

« ◆三鷹の北極星とMitakaの北極星 | トップページ | ◆青物横丁品川灯台複製の方位表示:NEOS »