澄清从DocumentListener修改Document的内容

从文本组件的Swing教程:

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

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

1)使用DocumentListener

  • JTextComponent输出到GUI

  • HightLighterStyled text

2) DocumentFilter用于过滤

  • 不需要的字符,

  • 字符序列,

这些过滤后的字符可以是

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

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

3)similairfunction提供JFormattedTextField可以输入到JTextComponent只有字符0 - 9decimal separatornegative sing

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

使用DocumentFilter

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

文中说你可能想要使用文档监听器。 这是一个如何写一个的例子。

Swing文本组件使用Document来表示其内容。 当文档内容以任何方式更改时,都会发生文档事件。

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

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

根据你的需要,我建议你看看DocumentFilter 。