【问题标题】:How to insert text into a Document without triggering insertUpdate()如何在不触发 insertUpdate() 的情况下将文本插入文档
【发布时间】:2012-11-26 21:16:33
【问题描述】:

我想创建一个 Swing JTextPane,当用户在其中输入文本时它会采取行动。但我也希望能够更改该窗格中的文本,而不会将更改视为用户键入。我该怎么做?

【问题讨论】:

  • 你可以收听KeyEvents,然后只看文档。或者你可以设置一个内部标志,告诉你的听众它当前正在被程序而不是用户修改。
  • 我更喜欢@mercutio 的第二个想法。按键事件可能具有欺骗性,尤其是因为还有其他非按键方式可以与文本组件交互。
  • 更改该窗格中的文本,而不将其视为用户输入我认为这不可能通过 API ... 话虽如此,您的代码逻辑可能是有点歪斜,因为您应该修复他们输入的整个文本,而不是通过 insertString(..) 重置该文本,例如,该调用当然会触发 insertUpdate(..),但由于文本先前已更改为匹配约束,它应该通过所有验证,因此没有进行任何更改,即insertString(..) 不称为 IMO。类似的东西:stackoverflow.com/a/13721186/1133011

标签: java swing jtextpane documentlistener documentfilter


【解决方案1】:

如果您不让更新事件触发,那么您的 UI 很可能也不会更新,具体取决于实际实现。所以我同意你最好通过与事件处理程序交谈,让它知道下一次更改将是程序性更改。像这样的:

try {
  listener.setProgrammaticChange(true);
  // change document
}
finally {
  listener.setProgrammaticChange(false);
}

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 2020-08-03
    • 2012-03-12
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多