Swing/ExportAsDragOrExportToClipboard のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ExportAsDragOrExportToClipboard へ行く。
- 1 (2023-05-29 (月) 04:30:58)
- 2 (2023-05-29 (月) 16:52:58)
- 3 (2023-10-10 (火) 10:46:10)
- 4 (2023-10-24 (火) 22:45:02)
- 5 (2024-11-20 (水) 11:08:13)
- category: swing folder: ExportAsDragOrExportToClipboard title: JListでマウスドラッグとクリップボード経由のアイテム移動が可能かを個別に設定する tags: [TransferHandler, DnD, JList] author: aterai pubdate: 2023-05-29T04:25:09+09:00 description: TransferHandlerを設定したJListでマウスドラッグ、またはクリップボード経由のアイテム移動を許可するかどうかを切り替えます。 image: https://drive.google.com/uc?id=1wp4ANGfODIJb47xCpCoT7OSVL7783dR8
概要
TransferHandler
を設定したJList
でマウスドラッグ、またはクリップボード経由のアイテム移動を許可するかどうかを切り替えます。
Screenshot
Advertisement
サンプルコード
@Override public void exportAsDrag(JComponent comp, InputEvent e, int action) {
Object o = comp.getClientProperty("canExportAsDrag");
if (Objects.equals(o, Boolean.TRUE)) {
super.exportAsDrag(comp, e, action);
}
}
@Override public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
Object o = comp.getClientProperty("canExportToClipboard");
if (Objects.equals(o, Boolean.TRUE)) {
super.exportToClipboard(comp, clip, action);
}
}
View in GitHub: Java, Kotlin解説
canExportAsDrag
- マウスドラッグによるリストアイテム移動の可・不可を切り替える
TransferHandler#exportAsDrag(...)
をオーバーライドしてドラッグ元のJList
にClientProperty
でcanExportAsDrag
が設定されているかどうかで判断- ドラッグ開始可能かを判断し、ドロップ可能かは無関係
canExportToClipboard
- リストアイテムをCtrl+Cでコピー、Ctrl+Xのカットが可能かを切り替える
TransferHandler#exportToClipboard(...)
をオーバーライドしてコピー(カット)元のJList
にClientProperty
でcanExportToClipboard
が設定されているかどうかで判断- Ctrl+Vでのペーストの可・不可は
TransferHandler#exportToClipboard(...)
のオーバーライドでは設定できない
canImportFromClipboard
- リストアイテムをCtrl+Vでペースト可能かを切り替える
TransferHandler#importData(TransferHandler.TransferSupport)
をオーバーライドして、TransferHandler.TransferSupport#isDrop() == true
ではない、かつペースト先のJList
にClientProperty
でcanImportFromClipboard
が設定されているかどうかで判断TransferHandler#importData(JComponent, Transferable)
やTransferHandler#canImport(TransferHandler.TransferSupport)
、TransferHandler#canImport(JComponent, DataFlavor[])
メソッドはマウスでのドラッグ&ドロップ時にのみ実行されてペースト時には実行されない
- 以下のように空のアクションを設定することでコピー、カット、ペーストのみ無効にする方法もある
ActionMap am = list.getActionMap(); Action empty = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { /* do nothing */ } }; am.put(TransferHandler.getCutAction().getValue(Action.NAME), empty); am.put(TransferHandler.getCopyAction().getValue(Action.NAME), empty); am.put(TransferHandler.getPasteAction().getValue(Action.NAME), empty);