Разъяснение по изменению содержимого документа из DocumentListener - PullRequest
1 голос
/ 14 марта 2012

Из руководства Swing по текстовым компонентам :

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

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

Ответы [ 3 ]

4 голосов
/ 14 марта 2012

1) с использованием DocumentListener для

  • вывода из JTextComponent в GUI

  • HightLighter или Styled text

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

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

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

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

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

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

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

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

использование DocumentFilter

3 голосов
/ 14 марта 2012

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

2 голосов
/ 14 марта 2012

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

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

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

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

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

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