【问题标题】:Clarification on modifying a Document's contents from a DocumentListener关于从 DocumentListener 修改文档内容的说明
【发布时间】:2012-03-13 21:44:51
【问题描述】:

来自text components 上的 Swing 教程:

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

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

【问题讨论】:

    标签: java swing


    【解决方案1】:

    1) 使用DocumentListener

    • JTextComponent 输出到 GUI

    • HightLighterStyled text

    2) DocumentFilter 用于过滤

    • 不需要的字符,

    • 字符序列,

    这些过滤后的字符可能是

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

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

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

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

    使用DocumentFilter

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @StanislavL 谢谢。这正是我担心的并发问题,并且从教程中的描述中没有完全清楚。
      【解决方案3】:

      文本说您可能想要使用文档侦听器。 Here 是一个如何编写的示例。

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

      因此,总是会触发文档侦听器的文本组件更改,但文本表示您无法更改此侦听器中组件的值。

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

      根据你想要的,我建议你看DocumentFilter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多