我有一个带有Suggestion-Popup的JTextField。 DocumentListener侦听所有InsertUpdate-Events并检查Suggestion-List并打开Popup。如果单击弹出窗口中的Suggestion-Entry,则选择的Word将设置为JTextField并关闭Popup。但这将触发一个新的InsertUpdate-Event并再次打开Popup。
我不想使用布尔标志,也不想经常删除和添加监听器。 还有另一种方法来阻止DocumentEvent循环吗? 或者有没有办法静静地设置文本? 我试过了:
this.getTextComponent().getDocument().insertString()
this.getTextComponent().setText()
答案 0 :(得分:1)
在没有触发事件的情况下无法插入文本,也没有第二个API触发用户更改的不同事件以及代码更改(as in Qt, for example)。您必须使用布尔保护或以其他方式禁用侦听器。
顺便说一句,SWT遭受同样糟糕的设计。
答案 1 :(得分:1)
1)删除听众
2)插入弹出文本
3)添加监听器