выбрать все в фокусе во многих jTextField - PullRequest
4 голосов
/ 09 сентября 2011

У меня в приложении много jTextFields (около 34 jTextFields), и я хочу, чтобы все они выделяли весь свой текст, когда получили фокус, и не выделяли ни один текст на потерянном фокусе.
Есть ли способ сделать это содин слушатель или я должен написать «FocusGained» и «FocusLost» для каждого из этих 34 jTextFields?

Спасибо

Ответы [ 4 ]

10 голосов
/ 09 сентября 2011

Создать класс для этой задачи:

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);
            }
        });
    }
}

Пример использования (код ниже):

screenshot

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);
}
2 голосов
/ 09 сентября 2011

Есть ли способ сделать это с одним слушателем

Вы можете использовать KeyboardFocusManager. См. Пример из Глобальных прослушивателей событий .

2 голосов
/ 09 сентября 2011

Создавайте в классе и расширяйте JTextField, теперь реализуйте все, что вы хотите в этом классе. И где вы можете создать объект JTextField, как это

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

вместо этого

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

, поэтому вы должны установить общий класс для текстового поля

0 голосов
/ 21 августа 2015

Я бы сказал, что простой способ сделать это - добавить действие по клику, которое просто выбирает все

private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {                                         
    jTextField1.selectAll();
}                      
...