JTextFieldのドラッグ&ドロップ設定をテストする
Total: 3896
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTextField
が初期状態や編集不可の場合などでドラッグ&ドロップをテストします。
Screenshot
Advertisement
サンプルコード
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;
}
});
View in GitHub: Java, Kotlin解説
0
:Initially has BasicTextUI$TextTransferHandler
- 初期状態で
BasicTextUI$TextTransferHandler
が設定されている- このため、例えばワードパットなどから文字列をドラッグ&ドロップで移動(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
- このサンプルの場合は、
4
:setDropTarget(null)
JTextField#setDropTarget(null)
でこのコンポーネントに関連付けされたDropTarget
をクリア- 親コンポーネントの
DropTarget
が有効になる- このサンプルの場合は、
JFrame
に設定した仮のTransferHandler
のDropTarget
- このサンプルの場合は、
5
:TransferHandler#canImport(...): false
TransferHandler#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)