Swing/FileListFlavor のバックアップ差分(No.14)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/FileListFlavor へ行く。
- 1 (2005-09-13 (火) 00:21:32)
- 2 (2006-01-29 (日) 01:30:22)
- 3 (2006-02-27 (月) 15:54:09)
- 4 (2006-04-16 (日) 01:04:41)
- 5 (2006-11-14 (火) 13:40:54)
- 6 (2007-05-16 (水) 15:03:20)
- 7 (2007-08-21 (火) 13:25:00)
- 8 (2010-12-12 (日) 15:47:24)
- 9 (2010-12-20 (月) 20:15:23)
- 10 (2011-03-08 (火) 18:56:10)
- 11 (2013-03-28 (木) 18:00:24)
- 12 (2013-05-26 (日) 05:40:19)
- 13 (2014-03-24 (月) 18:49:23)
- 14 (2014-12-31 (水) 01:43:34)
- 15 (2015-01-04 (日) 07:17:27)
- 16 (2015-01-21 (水) 18:36:02)
- 17 (2016-08-09 (火) 13:52:20)
- 18 (2016-09-08 (木) 17:55:23)
- 19 (2017-10-20 (金) 14:44:13)
- 20 (2018-09-07 (金) 16:36:33)
- 21 (2020-08-30 (日) 20:09:47)
- 22 (2022-03-06 (日) 07:26:05)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:Fileのドラッグ&ドロップ #navi(../) #tags(DragAndDrop, JTable, DropTargetListener, TransferHandler) RIGHT:Posted by &author(aterai); at 2005-06-20 * Fileのドラッグ&ドロップ [#f37e5330] --- title: Fileのドラッグ&ドロップ tags: [DragAndDrop, JTable, DropTargetListener, TransferHandler] author: aterai pubdate: 2005-06-20 description: WindowsなどからファイルをJTableにドラッグ&ドロップします。 --- * 概要 [#f37e5330] `Windows`などからファイルを`JTable`にドラッグ&ドロップします。 #download #ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMhxsIIsI/AAAAAAAAAZU/iZ6Pn8yTFFM/s800/FileListFlavor.png) #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMhxsIIsI/AAAAAAAAAZU/iZ6Pn8yTFFM/s800/FileListFlavor.png) ** サンプルコード [#t647511e] * サンプルコード [#t647511e] #code(link){{ final FileModel model = new FileModel(); final JTable table = new JTable(model); DropTargetListener dtl = new DropTargetAdapter() { @Override public void dragOver(DropTargetDragEvent dtde) { if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 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)) { 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); for(Object o: list) { if(o instanceof File) { File f = (File) o; model.addTest(new Test(f.getName(),f.getAbsolutePath())); 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 ufe) { ufe.printStackTrace(); }catch(IOException ioe) { ioe.printStackTrace(); } catch (UnsupportedFlavorException | IOException ex) { ex.printStackTrace(); } dtde.rejectDrop(); } }; DropTarget dt = new DropTarget(tbl,DnDConstants.ACTION_COPY,dtl,true); new DropTarget(table, DnDConstants.ACTION_COPY, dtl, true); }} ** 解説 [#p8d48bbf] * 解説 [#p8d48bbf] `Windows`のエクスプローラなどからファイルを選択(複数可)し、上記のサンプルアプリ上にドラッグ&ドロップするとファイル名などを`JTable`に表示しています。 ドロップされた`DataFlavor`が、`DataFlavor.javaFileListFlavor`の場合だけ、これをファイルとして処理する`DropTargetListener`を作成しています。 ---- `JDK 1.6.0`以降なら、以下のような`TransferHandler`を作成して使用する方法もあります。 - [[JTableでファイルとディレクトリを別々にソート>Swing/FileDirectoryComparator]] #code{{ table.setDropMode(DropMode.INSERT_ROWS); table.setTransferHandler(new FileTransferHandler()); }} #code{{ class FileTransferHandler extends TransferHandler { @Override public boolean importData(TransferSupport support) { try{ if(canImport(support)) { JTable table = (JTable)support.getComponent(); DefaultTableModel model = (DefaultTableModel)table.getModel(); for(Object o: (List)support.getTransferable().getTransferData( DataFlavor.javaFileListFlavor)) { if(o instanceof File) { File file = (File)o; model.addRow(new Object[] { file, file.length(), file.getAbsolutePath()}); } } return true; } }catch(Exception ex) { ex.printStackTrace(); } return false; } @Override public boolean canImport(TransferSupport support) { return support.isDataFlavorSupported(DataFlavor.javaFileListFlavor); } } }} ** 参考リンク [#tf100a65] * 参考リンク [#tf100a65] - [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]] ** コメント [#i79a7ae9] * コメント [#i79a7ae9] #comment #comment