Swing/TableCellTransferHandler のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/TableCellTransferHandler へ行く。
- 1 (2015-12-15 (火) 17:07:09)
- 2 (2017-06-04 (日) 13:20:46)
- 3 (2017-11-17 (金) 17:58:02)
- 4 (2019-06-28 (金) 20:35:26)
- 5 (2019-10-23 (水) 21:26:37)
- 6 (2021-05-22 (土) 04:40:12)
- 7 (2021-11-24 (水) 06:34:17)
- 8 (2025-01-03 (金) 08:57:02)
- 9 (2025-01-03 (金) 09:01:23)
- 10 (2025-01-03 (金) 09:02:38)
- 11 (2025-01-03 (金) 09:03:21)
- 12 (2025-01-03 (金) 09:04:02)
- 13 (2025-06-19 (木) 12:41:37)
- 14 (2025-06-19 (木) 12:43:47)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- title: JTableのセルを選択してJListにドラッグ&ドロップでIconをコピーする tags: [JTable, JList, DragAndDrop, TransferHandler, Icon] author: aterai pubdate: 2015-05-25T00:03:51+09:00 description: JTableのセルを選択可能にし、ドラッグ&ドロップでそのセル内のIconをJListにコピーできるようにTransferHandlerを設定します。 --- * 概要 [#w448274c] `JTable`のセルを選択可能にし、ドラッグ&ドロップでそのセル内の`Icon`を`JList`にコピーできるように`TransferHandler`を設定します。 #download(https://lh3.googleusercontent.com/-TUrxk7yYqYM/VWHkR1mENvI/AAAAAAAAN4w/bEU29WIgjOE/s800/TableCellTransferHandler.png) * サンプルコード [#s870885c] #code(link){{ //DataFlavor FLAVOR = new ActivationDataFlavor(JTable.class, DataFlavor.javaJVMLocalObjectMimeType, "JTable"); class CellIconTransferHandler extends TransferHandler { private final DataFlavor localObjectFlavor; public CellIconTransferHandler(DataFlavor flavor) { super(); localObjectFlavor = flavor; } @Override protected Transferable createTransferable(JComponent c) { JTable table = (JTable) c; if (table.getSelectedColumn() != 1) { return null; } return new DataHandler(table, localObjectFlavor.getMimeType()); } @Override public boolean canImport(TransferSupport info) { return false; } @Override public int getSourceActions(JComponent c) { return COPY; } } class TableCellTransferHandler extends TransferHandler { private final DataFlavor localObjectFlavor; public TableCellTransferHandler(DataFlavor flavor) { super(); localObjectFlavor = flavor; } @Override public boolean canImport(TransferSupport info) { Component c = info.getComponent(); if (c instanceof JList) { return info.isDrop() && info.isDataFlavorSupported(localObjectFlavor); } return false; } @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY; } @SuppressWarnings("unchecked") @Override public boolean importData(TransferSupport info) { if (!canImport(info)) { return false; } JList l = (JList) info.getComponent(); try { Object o = info.getTransferable().getTransferData(localObjectFlavor); if (o instanceof JTable) { JTable t = (JTable) o; Object obj = t.getValueAt(t.getSelectedRow(), t.getSelectedColumn()); ((DefaultListModel) l.getModel()).addElement(obj); } return true; } catch (UnsupportedFlavorException | IOException ex) { ex.printStackTrace(); } return false; } } }} * 解説 [#z18ca370] 上記のサンプルでは、ドラッグ元の`JTable`に`CellIconTransferHandler`を設定して特定の列のアイコンのみドラッグ可能にし、ドロップ先の`JList`には`TableCellTransferHandler`を設定してアイコンを受け取り(実際は`JTable`ごと受け取って選択されたアイコンを取得)、これを一行で表示しています。 - テスト -- `clear`ボタン: `JList`にドロップされたアイコンをクリア -- `filter`ボタン: `JList`にドロップされたアイコンを含む行のみ表示するフィルタを`JTable`に設定 //* 参考リンク * コメント [#kd14e7ec] #comment #comment