установка слушателя "On Change" на jFormattedTextField - PullRequest
10 голосов
/ 01 сентября 2011

В моей программе есть jFormattedTextField, и мне нужно обновить текст jLabel, когда значение jFormattedTextField было корректно изменено.
На самом деле jFormattedTextField получает число, а jLabel отображает разницу между этим числом и другим числом.
В настоящее время я делаю это, слушая событие «FocusLost» текста jFormatted.

Как я могу это сделать?

Ответы [ 2 ]

13 голосов
/ 01 сентября 2011

зарегистрировать PropertyChangeListener для свойства "value" для formattedField

    PropertyChangeListener l = new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            String text = evt.getNewValue() != null ? evt.getNewValue().toString() : "";
            label.setText(evt.getNewValue());
        }
    };
    formattedTextField.addPropertyChangeListener("value", l);

Не используйте DocumentListener или FocusListener: первый слишком часто уведомляется (о каждом типе ключа, до того, как произошел синтаксический анализ), последний слишком хрупкий.

1 голос
/ 01 сентября 2011

Вероятно, самый простой способ сделать это - использовать javax.swing.event.DocumentListener, который вы прикрепляете к текстовому полю. Затем по мере ввода пользователем метка может быть обновлена.

Я не помню точную последовательность, но слушатель insertUpdate() может быть вызван до проверки поля форматированного текста. Таким образом, вам также может понадобиться проверить действительные номера в вашем слушателе.

...