Swing/DragEnabledTextComponent の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/DragEnabledTextComponent へ行く。
- Swing/DragEnabledTextComponent の差分を削除
--- 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?id=1bHJS4TOFW3wUg-zz4Ut_gnrS2vYNXKE_Vg --- * 概要 [#summary] `JTextField`が初期状態や編集不可の場合などでドラッグ&ドロップをテストします。 #download(https://drive.google.com/uc?id=1bHJS4TOFW3wUg-zz4Ut_gnrS2vYNXKE_Vg) * サンプルコード [#sourcecode] #code(link){{ JTextField textField0 = new JTextField("Initially has BasicTextUI$TextTransferHandler"); textField0.setDragEnabled(true); JTextField textField1 = new JTextField("setEditable(false)"); textField1.setDragEnabled(true); textField1.setEditable(false); JTextField textField2 = new JTextField("setEnabled(false)"); textField2.setDragEnabled(true); textField2.setEnabled(false); JTextField textField3 = new JTextField("setTransferHandler(null)"); textField3.setDragEnabled(true); textField3.setTransferHandler(null); JTextField textField4 = new JTextField("setDropTarget(null)"); textField4.setDragEnabled(true); textField4.setDropTarget(null); JTextField textField5 = new JTextField("TransferHandler#canImport(...): false"); textField5.setDragEnabled(true); textField5.setTransferHandler(new TransferHandler() { @Override public boolean canImport(TransferSupport info) { return false; } }); }} * 解説 [#explanation] - `0`: `Initially has BasicTextUI$TextTransferHandler` -- 初期状態で`BasicTextUI$TextTransferHandler`が設定されている --- このため、例えばワードパットなどから文字列をドラッグ&ドロップで移動(KBD{Ctrl+ドロップ}でコピー)可能 --- `BasicTextUI$TextTransferHandler`はファイルなどのドロップには対応していない -- `JTextField#setDragEnabled(true)`を設定しているので、他の`JTextComponent`や自分自身にドラッグ&ドロップで移動・コピーが可能 - `1`: `setEditable(false)` -- 初期状態で`BasicTextUI$TextTransferHandler`が設定されている -- `JTextField#setEditable(false)`を設定した場合、ドロップ不可となる -- `JTextField#setEditable(false)`かつ`JTextField#setDragEnabled(true)`の場合、選択文字列を他の`JTextComponent`にドラッグ&ドロップでコピー可能(移動は不可) - `2`: `setEnabled(false)` -- 初期状態で`BasicTextUI$TextTransferHandler`が設定されている -- `JTextField#setEnabled(false)`で使用不可のコンポーネントにはドラッグ&ドロップ不可 -- `JTextField#setDragEnabled(true)`を設定しても文字列選択不可なので、`BasicTextUI$TextTransferHandler`ではドラッグ自体が開始できない - `3`: `setTransferHandler(null)` -- `JTextField#setTransferHandler(null)`で`BasicTextUI$TextTransferHandler`を削除 -- 親コンポーネントの`TransferHandler`が有効になる --- このサンプルの場合は、`JFrame`に設定したダミー`TransferHandler` --- このサンプルの場合は、`JFrame`に設定した仮の`TransferHandler` - `4`: `setDropTarget(null)` -- `JTextField#setDropTarget(null)`でこのコンポーネントに関連付けされた`DropTarget`をクリア -- 親コンポーネントの`DropTarget`が有効になる --- このサンプルの場合は、`JFrame`に設定したダミー`TransferHandler`の`DropTarget` --- このサンプルの場合は、`JFrame`に設定した仮の`TransferHandler`の`DropTarget` - `5`: `TransferHandler#canImport(...): false` -- `TransferHandler#canImport(...)`が常に`false`を返す`TransferHandler`を設定 -- 親コンポーネントの`TransferHandler`にドロップイベントは伝搬せず、常にドロップ不可 -- `JTextField#setDragEnabled(true)`を設定してもこの`TransferHandler`ではドラッグ開始できない * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#setDropTarget-java.awt.dnd.DropTarget- Component#setDropTarget(...) (Java Platform SE 8)] - [https://docs.oracle.com/javase/tutorial/uiswing/dnd/defaultsupport.html Default DnD Support (The Java™ Tutorials > Creating a GUI With JFC/Swing > Drag and Drop and Data Transfer)] * コメント [#comment] #comment #comment