澄清从DocumentListener修改Document的内容

时间:2012-03-13 21:44:51

标签: java swing

来自text components上的Swing教程:

  

您可能希望在文档侦听器中更改文档的文本。但是,您永远不应该从文档侦听器中修改文本组件的内容。如果你这样做,该程序可能会死锁。相反,您可以使用带格式的文本字段或提供文档过滤器。

我很困惑。那么改变文本的正确方法是什么,例如。作为KeyEvent的结果?

3 个答案:

答案 0 :(得分:4)

1)使用DocumentListener作为

  • JTextComponent输出到GUI

  • HightLighterStyled text

2)DocumentFilter用于过滤

  • 不受欢迎的字符,

  • 字符序列,

这些过滤的字符可以是

  • 替换为另一个char(或定义的字符序列)

  • 已删除(永远不会显示在JTextComponent

3)提供JFormattedTextField的similair功能可以输入JTextComponent仅字符0 - 9decimal separatornegative sing

4)     那么改变文本的正确方法是什么,例如。作为KeyEvent的结果?

使用DocumentFilter

答案 1 :(得分:3)

直接答案是使用SwingUtilities.invokeLater()Document修改代码放在那里。但是mKorbel的回答(+1)涵盖了大多数你能想象到的案例。

答案 2 :(得分:2)

文字说你可能想要使用文件监听器。 Here是如何编写一个的例子。

  

Swing文本组件使用Document来表示其内容。   文档内容在任何文档内容发生变化时发生   方式。

因此,始终您的文本组件更改文档侦听器将触发,但文本说您无法更改此侦听器中组件的值。

KeyListener(不是文档侦听器)中,您可以使用setText()更改值。

根据您的需要,我建议您查看DocumentFilter