Разъяснение по изменению содержимого документа из DocumentListener

Из учебника Swing по текстовым компонентам:

Вы можете изменить текст документа в слушателе документа. Однако вы никогда не должны изменять содержимое текстового компонента из слушателя документа. Если вы это сделаете, программа, скорее всего, будет в тупике. Вместо этого вы можете использовать форматированное текстовое поле или предоставить фильтр документа.

Я сбит с толку. Итак, как правильно изменить текст, например. в результате KeyEvent?

3 ответа

Решение

1) используя DocumentListener за

  • вывод из JTextComponent в графический интерфейс

  • HightLighter или же Styled text

2) DocumentFilter для фильтрации

  • нежелательные символы,

  • последовательность (ы) символов,

эти отфильтрованные символы могут быть

  • заменен другим символом (или с определенной последовательностью символов)

  • удален (никогда не будет отображаться в JTextComponent)

3) функциональность similair для обеспечения JFormattedTextFieldможно ввести в JTextComponent только символы 0 - 9, decimal separator, negative sing,

4) Итак, как правильно изменить текст, например. в результате KeyEvent?

использовать DocumentFilter

Прямой ответ использует SwingUtilities.invokeLater() размещение Document Код модификации там. Но ответ mKorbel (+1) охватывает большинство случаев, которые вы можете себе представить.

Текст говорит, что вы можете использовать прослушиватель документов. Вот пример, как написать один.

Текстовый компонент Swing использует Document для представления своего содержимого. События документа происходят, когда содержимое документа изменяется каким-либо образом.

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

В KeyListener (это не слушатель документа) вы можете изменить значение, используя setText(),

В зависимости от того, что вы хотите, я предлагаю вам посмотреть DocumentFilter.

Другие вопросы по тегам