Java中带有文档侦听器的自动完成文本框
Posted
技术标签:
【中文标题】Java中带有文档侦听器的自动完成文本框【英文标题】:Autocomplete Text box with Document Listener in Java 【发布时间】:2017-04-09 04:56:43 【问题描述】:我正在尝试为我正在编写的程序制作一个自动完成文本框。我有逻辑,但我在正确实施它时遇到了一些麻烦。首先,我使用按键侦听器进行了尝试,但该解决方案在同时处理多个按键的方式上有点奇怪。然后我尝试了更好的 DocumentListener,但由于线程问题,不允许我从 Listener 中编辑文档。我阅读了有关 DocumentFilter 的一些内容,但找不到有关如何使用它的单一指南。有没有办法用 documentListener 编辑文档?或者您会推荐 DocumentFilter,如果是,您如何使用它?
【问题讨论】:
您可以谨慎地编辑文档,方法是将编辑内容放在 Runnable 中并使用SwingUtilities.invokeLater(...)
将其排入事件线程,但这样做很危险。至于如何使用 DocumentFilter,这个网站上有很多这样的例子,有几个是我自己写的。只需search the site(点击链接)。
是的,我尝试在侦听器中使用 invokeLater,它在无限循环中运行。知道为什么会这样吗??
这是危险的一部分——当您更改文档时调用侦听器,如果您从侦听器内部更改文档,这可能会导致循环引用。
【参考方案1】:
DocumentListener 不应用于编辑文档。这样做需要调用 SwingUtilities.invokeLater(...) 并且由于 DocumentListener 检测到文档的更改,因此任何编辑都会导致无限循环。最好的办法是使用 DocumentFilter。
【讨论】:
以上是关于Java中带有文档侦听器的自动完成文本框的主要内容,如果未能解决你的问题,请参考以下文章
成功完成初始自动完成后,如何在 WinForm 文本框上重新启动自动完成?
Java Web 技术(JSP 和 servlet)中的 AJAX 自动完成文本框