【发布时间】:2012-03-13 21:44:51
【问题描述】:
来自text components 上的 Swing 教程:
您可能希望在文档侦听器中更改文档的文本。但是,您永远不应该从文档侦听器中修改文本组件的内容。如果这样做,程序很可能会死锁。相反,您可以使用格式化的文本字段或提供文档过滤器。
我很困惑。那么更改文本的正确方法是什么,例如。作为 KeyEvent 的结果?
【问题讨论】:
来自text components 上的 Swing 教程:
您可能希望在文档侦听器中更改文档的文本。但是,您永远不应该从文档侦听器中修改文本组件的内容。如果这样做,程序很可能会死锁。相反,您可以使用格式化的文本字段或提供文档过滤器。
我很困惑。那么更改文本的正确方法是什么,例如。作为 KeyEvent 的结果?
【问题讨论】:
1) 使用DocumentListener
从JTextComponent 输出到 GUI
HightLighter 或Styled text
2) DocumentFilter 用于过滤
不需要的字符,
字符序列,
这些过滤后的字符可能是
替换为另一个字符(或定义的字符序列)
已移除(永远不会显示在JTextComponent)
3) 提供JFormattedTextField 的类似功能可以输入到JTextComponent 仅字符0 - 9、decimal separator、negative sing、
4) 那么更改文本的正确方法是什么,例如。作为 KeyEvent 的结果?
【讨论】:
直接的答案是使用SwingUtilities.invokeLater() 将Document 修改代码放在那里。但 mKorbel 的回答 (+1) 涵盖了您能想象到的大部分情况。
【讨论】:
文本说您可能想要使用文档侦听器。 Here 是一个如何编写的示例。
Swing 文本组件使用 Document 来表示其内容。 文档事件发生在文档内容发生变化时 方式。
因此,总是会触发文档侦听器的文本组件更改,但文本表示您无法更改此侦听器中组件的值。
在KeyListener(不是文档侦听器)中,您可以使用setText() 更改值。
根据你想要的,我建议你看DocumentFilter。
【讨论】: