アプリケーションにたくさんのjTextFields(約34のjTextFields)があり、フォーカスを取得するときにすべてのテキストを選択し、フォーカスが失われたテキストを選択しないようにします。
1人のリスナーでこれを行う方法はありますか、またはこれらの34個のjTextFieldのそれぞれに対して「FocusGained」と「FocusLost」を作成する必要がありますか?
ありがとう
アプリケーションにたくさんのjTextFields(約34のjTextFields)があり、フォーカスを取得するときにすべてのテキストを選択し、フォーカスが失われたテキストを選択しないようにします。
1人のリスナーでこれを行う方法はありますか、またはこれらの34個のjTextFieldのそれぞれに対して「FocusGained」と「FocusLost」を作成する必要がありますか?
ありがとう
このタスクのクラスを作成します。
static class FocusTextField extends JTextField {
{
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
FocusTextField.this.select(0, getText().length());
}
@Override
public void focusLost(FocusEvent e) {
FocusTextField.this.select(0, 0);
}
});
}
}
使用例 (以下のコード):
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame("Test");
frame.setLayout(new GridLayout(5, 1));
frame.add(new FocusTextField());
frame.add(new FocusTextField());
frame.add(new FocusTextField());
frame.add(new FocusTextField());
frame.add(new FocusTextField());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
1人のリスナーでこれを行う方法はありますか
KeyboardFocusManager を使用できます。Global Event Listenersの例を参照してください。
クラスで作成し、JTextField を拡張して、このクラスで必要なものをすべて実装します。そして、このように JTextField のオブジェクトを作成できる場所
JTextField txt1 = new JTextField();
frm.add(txt1);
このようにする代わりに
JTextField txt1 = new CustomText();
frm.add(txt1);
そのため、テキストフィールドに共通クラスを設定する必要があります
それを行う簡単な方法は、単にすべてを選択するクリック時のアクションを追加することだと思います
private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {
jTextField1.selectAll();
}