Зміна відстеження в текстових компонентах java, блог тільки про java

Іноді буває необхідно оновлювати частину призначеного для користувача інтерфейсу всякий раз, коли користувач редагує текст, не чекаючи, поки користувач клацне на кнопці. Нижче представлений простий приклад. Ми відображаємо три текстових поля для червоного, блакитного і зеленого компонентів кольору. Всякий раз, коли змінюється вміст текстових полів, необхідно оновлювати кольору. На рис. 1 показано працює додаток, код якого буде представлений в кінці статті.

Зміна відстеження в текстових компонентах java, блог тільки про java
Рис.1. Відстеження змін в текстовому полі.

Перш за все, зверніть увагу, що відстеження натискань клавіш на клавіатурі - це не зовсім підходяща ідея. Справа в тому, що деякі натискання клавіш (наприклад, клавіш управління курсором) не призводять до зміни тексту.

Текст може бути оновлений у результаті дій, вироблених з допомогою миші (наприклад, використання середньої кнопки миші для вставки даних в системі X11). Замість цього, вам потрібно «попросити» документ (а не компонент тексту) повідомляти вас всякий раз, коли проводиться зміна даних. Для цього буде потрібно встановити слухач документа (document listener):

textField. getDocument (). addDocumentListener (listener);

Після того як текст буде змінений, викликається один з наступних методів:

void insertUpdate (DocumentEvent event)

void removeUpdate (DocumentEvent event)

void changeUpdate (DocumentEvent event)

Перші два методи викликаються при вставці або видалення символів. Третій метод для текстових полів не викликається взагалі. Для більш складних типів документів він може бути викликаний при деякому іншому зміні, такому як зміна в форматуванні.

На жаль, немає можливості повідомити про зміну тексту за допомогою одиночного зворотного виклику - як правило, вам не слід турбуватися про те, як він змінюється. Більш того, на цей випадок навіть немає спеціального класу. Таким чином, ваш слухач документа повинен реалізовувати всі три методи. Нижче показано, що робиться в програмі:

Метод setColor () використовує метод getText для отримання рядків, що вводяться користувачем в даний момент часу, з текстових полів і установки кольору.

Наша програма має одне обмеження. Користувач може ввести в текстовому полі текст з помилками (наприклад, «Мєшина» замість «машина») або взагалі залишити його порожнім. Поки що ми перехоплюємо виняток NumberFormatException. генерується методом parseInt. і просто не оновлюємо колір, якщо запис в текстовому полі не є числом.

Код програми: