4

アプリケーションにたくさんのjTextFields(約34のjTextFields)があり、フォーカスを取得するときにすべてのテキストを選択し、フォーカスが失われたテキストを選択しないようにします。
1人のリスナーでこれを行う方法はありますか、またはこれらの34個のjTextFieldのそれぞれに対して「FocusGained」と「FocusLost」を作成する必要がありますか?

ありがとう

4

4 に答える 4

13

このタスクのクラスを作成します。

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);
}
于 2011-09-09T12:05:26.140 に答える
2

1人のリスナーでこれを行う方法はありますか

KeyboardFocusManager を使用できます。Global Event Listenersの例を参照してください。

于 2011-09-09T15:11:11.723 に答える
2

クラスで作成し、JTextField を拡張して、このクラスで必要なものをすべて実装します。そして、このように JTextField のオブジェクトを作成できる場所

JTextField txt1 = new JTextField();
frm.add(txt1);

このようにする代わりに

JTextField txt1 = new CustomText();
frm.add(txt1);

そのため、テキストフィールドに共通クラスを設定する必要があります

于 2011-09-09T12:06:20.350 に答える
-1

それを行う簡単な方法は、単にすべてを選択するクリック時のアクションを追加することだと思います

private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {                                         
    jTextField1.selectAll();
}                      
于 2015-08-21T00:06:57.443 に答える