Разъяснение по изменению содержимого документа из 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.