我有一个带有建议弹出窗口的 JTextField。 DocumentListener 监听所有 InsertUpdate-Events 并检查建议列表并打开 Popup。如果单击弹出窗口中的建议条目,所选的 Word 将设置为 JTextField 并且弹出窗口关闭。但这将触发一个新的 InsertUpdate-Event 并且弹出窗口再次打开。
我不想经常使用 boolean 标志或删除和添加监听器。 还有其他方法可以防止 DocumentEvent 循环吗? 或者有没有办法默默地设置文本? 我尝试过:
this.getTextComponent().getDocument().insertString()
this.getTextComponent().setText()
最佳答案
无法在不触发事件的情况下插入文本,也没有第二个 API 可以针对用户的更改和代码的更改触发不同的事件 ( as in Qt, for example )。您必须使用 boolean 保护或以其他方式禁用监听器。
顺便说一句,SWT也遭受着同样糟糕的设计。
关于java - 防止 DocumentEvent 循环的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531265/