防止DocumentEvent循环的最佳方法?

时间:2010-08-20 13:31:04

标签: java swing

我有一个带有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()

2 个答案:

答案 0 :(得分:1)

在没有触发事件的情况下无法插入文本,也没有第二个API触发用户更改的不同事件以及代码更改(as in Qt, for example)。您必须使用布尔保护或以其他方式禁用侦听器。

顺便说一句,SWT遭受同样糟糕的设计。

答案 1 :(得分:1)

1)删除听众
2)插入弹出文本
3)添加监听器