Как ввести данные в swing.JTextField без нажатия клавиши ввода? - PullRequest
2 голосов
/ 15 августа 2011

Я строю графический интерфейс с использованием сетевых компонентов (Java), и мой вопрос заключается в том, как получить строку в текстовом поле переменной, не нажимая клавишу Enter ? Я написал этот код:

private void idTextBoxActionPerformed(java.awt.event.ActionEvent evt)   {                                          

   this.Id  =  evt.getActionCommand();
}

Проблема в том, что если я просто ввожу текст и перехожу к следующему текстовому полю, данные не попадают в переменную Id, если я нажимаю Ввод все в порядке.

Ответы [ 2 ]

5 голосов
/ 15 августа 2011

Нажатие Enter вызывает ActionEvent из того текстового поля, которое вы слушаете в своем методе actionPerformed, и именно поэтому ваш код работает только в этом сценарии.

Вы можете использовать FocusListener, чтобы получить то, что выхочу.Вы захотите прослушать событие focusLost, когда вы уходите от текстового поля.

class foo implements FocusListener {
    JTextField textField = new JTextField("A TextField");
    textField.addFocusListener(this);

    public void focusGained(FocusEvent e) {
       // Do whatever you want
    }

    public void focusLost(FocusEvent e) {
       // Save the text in the field to your id variable
    }
}

РЕДАКТИРОВАТЬ

В следующем руководстве показано , как использовать отформатированныйTextField .Вы можете игнорировать бит форматирования и сосредоточиться на его аспекте propertyChangeListner.Идея та же, что и в моем первом примере, но с использованием другого типа слушателя.

2 голосов
/ 15 августа 2011

Вы можете использовать событие действия или событие фокуса, чтобы отслеживать изменения на уровне компонента.Но если текст, который вас интересует, изменится, вам следует рассмотреть возможность использования DocumentListener .Прочитайте учебник здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...