澄清从DocumentListener修改Document的内容
从文本组件的Swing教程:
您可能希望在文档侦听器中更改文档的文本。 但是,您永远不应该从文档侦听器中修改文本组件的内容。 如果你这样做,该程序可能会陷入僵局。 相反,您可以使用带格式的文本字段或提供文档filter。
我很迷惑。 那么改变文本的正确方法是什么,例如。 作为KeyEvent的结果?
1)使用DocumentListener
-
从
JTextComponent
输出到GUI -
HightLighter
或Styled text
2) DocumentFilter
用于过滤
-
不需要的字符,
-
字符序列,
这些过滤后的字符可以是
-
替换为另一个char(或定义的字符序列)
-
删除(永远不会显示在
JTextComponent
)
3)similairfunction提供JFormattedTextField
可以输入到JTextComponent
只有字符0 - 9
, decimal separator
, negative sing
,
4)那么改变文本的正确方法是什么,例如。 作为KeyEvent的结果?
使用DocumentFilter
直接的答案是使用SwingUtilities.invokeLater()
将Document
修改代码放在那里。 但是mKorbel的答案(+1)涵盖了大多数你能想象到的案例。
文中说你可能想要使用文档监听器。 这是一个如何写一个的例子。
Swing文本组件使用Document来表示其内容。 当文档内容以任何方式更改时,都会发生文档事件。
因此,始终您的文本组件更改文档侦听器将触发,但文本说您无法更改此侦听器中组件的值。
在KeyListener
(不是文档侦听器)中,您可以使用setText()
更改值。
根据你的需要,我建议你看看DocumentFilter 。