Swing/DragEnabledTextComponent のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DragEnabledTextComponent へ行く。
- 1 (2017-10-31 (火) 14:20:48)
- 2 (2018-02-15 (木) 14:23:42)
- 3 (2019-04-18 (木) 18:08:07)
- 4 (2019-11-15 (金) 15:16:17)
- 5 (2021-06-01 (火) 10:38:48)
- 6 (2024-02-02 (金) 12:27:10)
- 7 (2025-01-03 (金) 08:57:02)
- 8 (2025-01-03 (金) 09:01:23)
- 9 (2025-01-03 (金) 09:02:38)
- 10 (2025-01-03 (金) 09:03:21)
- 11 (2025-01-03 (金) 09:04:02)
- 12 (2025-06-19 (木) 12:41:37)
- 13 (2025-06-19 (木) 12:43:47)
- category: swing folder: DragEnabledTextComponent title: JTextFieldのドラッグ&ドロップ設定をテストする tags: [JTextField, DragAndDrop, TransferHandler] author: aterai pubdate: 2017-10-30T15:36:53+09:00 description: JTextFieldが初期状態や編集不可の場合などでドラッグ&ドロップをテストします。 image: https://drive.google.com/uc?export=view&id=1bHJS4TOFW3wUg-zz4Ut_gnrS2vYNXKE_Vg
概要
JTextFieldが初期状態や編集不可の場合などでドラッグ&ドロップをテストします。
Screenshot

Advertisement
サンプルコード
JTextField textField0 = new JTextField("Initially has BasicTextUI$TextTransferHandler");
JTextField textField1 = new JTextField("setEditable(false)");
textField1.setEditable(false);
JTextField textField2 = new JTextField("setEnabled(false)");
textField2.setEnabled(false);
JTextField textField3 = new JTextField("setTransferHandler(null)");
textField3.setTransferHandler(null);
JTextField textField4 = new JTextField("setDropTarget(null)");
textField4.setDropTarget(null);
JTextField textField5 = new JTextField("TransferHandler#canImport(...): false");
textField5.setTransferHandler(new TransferHandler() {
@Override public boolean canImport(TransferSupport info) {
return false;
}
});
View in GitHub: Java, Kotlin解説
Initially has BasicTextUI$TextTransferHandler- 初期状態で、
BasicTextUI$TextTransferHandlerが設定されている- このため、例えばワードパットなどから文字列をドラッグ&ドロップで移動(Ctrl+ドロップでコピー)可能
BasicTextUI$TextTransferHandlerはファイルなどのドロップには対応していない
JTextField#setDragEnabled(true)を設定しているので、他のJTextComponentや自分自身にドラッグ&ドロップで移動・コピーが可能
- 初期状態で、
setEditable(false)- 初期状態で、
BasicTextUI$TextTransferHandlerが設定されている JTextField#setEditable(false)を設定した場合、ドロップ不可となるJTextField#setEditable(false)かつJTextField#setDragEnabled(true)の場合、選択文字列を他のJTextComponentにドラッグ&ドロップでコピー可能(移動は不可)
- 初期状態で、
setEnabled(false)- 初期状態で、
BasicTextUI$TextTransferHandlerが設定されている JTextField#setEnabled(false)で使用不可のコンポーネントにはドラッグ&ドロップ不可JTextField#setDragEnabled(true)を設定しても文字列選択不可なので、BasicTextUI$TextTransferHandlerではドラッグ自体が開始できない
- 初期状態で、
setTransferHandler(null)JTextField#setTransferHandler(null)でBasicTextUI$TextTransferHandlerを削除- 親コンポーネントの
TransferHandlerが有効になる- このサンプルの場合は、
JFrameに設定したダミーTransferHandler
- このサンプルの場合は、
setDropTarget(null)JTextField#setDropTarget(null)でこのコンポーネントに関連付けされたDropTargetをクリア- 親コンポーネントの
DropTargetが有効になる- このサンプルの場合は、
JFrameに設定したダミーTransferHandlerのDropTarget
- このサンプルの場合は、
TransferHandler#canImport(...): falseTransferHandler#canImport(...)が常にfalseを返すTransferHandlerを設定- 親コンポーネントの
TransferHandlerにドロップイベントは伝搬せず、常にドロップ不可 JTextField#setDragEnabled(true)を設定してもこのTransferHandlerではドラッグ開始できない
参考リンク
- Component#setDropTarget(...) (Java Platform SE 8)
- Default DnD Support (The Java™ Tutorials > Creating a GUI With JFC/Swing > Drag and Drop and Data Transfer)