java - 防止 DocumentEvent 循环的最佳方法?

标签 java swing

我有一个带有建议弹出窗口的 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/

相关文章:

java - 我的 java swing 应用程序 jcomponents 不会绘制,只有在计算完成后才重新绘制?

Java游戏重置时不保存变量

java - 如何在数据库中保存样式文本并在 JEditor Pane 中检索相同样式的文本

java - Servlet 应用程序 : Http session timeout

java - 无法使用 JDBC 在 SQLite3 数据库中插入值

java - 使用 Square 的 Retrofit Client,是否可以取消正在进行的请求?如果有怎么办?

java - 获取 JLabel 中具有特定坐标的像素的颜色

java - 了解命令行参数

java - 如何让其他人使用依赖数据库的桌面应用程序?

java - 广告选择面板抛出 JCombobox