Fileのドラッグ&ドロップ

編集者:Terai Atsuhiro~

作成日:2005-06-20
更新日:2022-03-06 (日) 07:26:05
  • 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

概要

WindowsなどからファイルをJTableにドラッグ&ドロップします。

概要

WidnowsなどからファイルをJTableにドラッグ&ドロップします。
http://terai.xrea.jp/swing/filelistflavor/screenshot.png

サンプルコード

#spanend
#spanadd
FileModel model = new FileModel();
#spanend
#spanadd
JTable table = new JTable(model);
#spanend
#spanadd
DropTargetListener dtl = new DropTargetAdapter() {
#spanend
  @Override public void dragOver(DropTargetDragEvent dtde) {
    if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
      dtde.acceptDrag(DnDConstants.ACTION_COPY);
      return;
    }
    dtde.rejectDrag();
  }

#spandel
**サンプルコード [#t647511e]
#spanend
 DropTargetListener dtl = new DropTargetAdapter() {
   public void dragOver(DropTargetDragEvent dtde) {
     if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
       dtde.acceptDrag(DnDConstants.ACTION_COPY);
       return;
     }
     dtde.rejectDrag();
   }
   public void drop(DropTargetDropEvent dtde) {
     try {
       if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
         dtde.acceptDrop(DnDConstants.ACTION_COPY);
         Transferable t = dtde.getTransferable();
         java.util.List list = (java.util.List)t.getTransferData(
                                  DataFlavor.javaFileListFlavor);
         java.util.Iterator i = list.iterator();
         while(i.hasNext()) {
           File file = (File) i.next();
           model.addTest(new Test(file.getName(),
                                  file.getAbsolutePath()));
         }
         dtde.dropComplete(true);
         return;
       }
     }catch(UnsupportedFlavorException ufe) {
       ufe.printStackTrace();
     }catch(IOException ioe) {
       ioe.printStackTrace();
     }
     dtde.rejectDrop();
   }
 };
 DropTarget dt = new DropTarget(tbl,DnDConstants.ACTION_COPY,dtl,true);
  @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();
  }
#spanadd
};
#spanend
#spanadd
new DropTarget(table, DnDConstants.ACTION_COPY, dtl, true);
#spanend
#spanadd
View in GitHub: Java, Kotlin

解説

  • Windowsのファイルエクスプローラなどからファイルを選択(複数選択可)、ドラッグ、JTable上にドロップでファイル名などを一覧表示
  • ドロップされたDataFlavorDataFlavor.javaFileListFlavorの場合のみ、これをファイルとして処理するDropTargetListenerを作成
  • JDK 1.6.0以降では以下のようなTransferHandlerが使用可能

解説

Windowsのエクスプローラなどからファイルを選択(複数可)し、上記のサンプルアプリ上にドラッグ&ドロップするとファイル名などをJTableに表示しています。

参考リンク

ドロップされたDataFlavorが、DataFlavor.javaFileListFlavorの場合だけ、これをファイルとして処理するDropTargetListenerを作成しています。

参考リンク

コメント

コメント