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中带有文档侦听器的自动完成文本框的主要内容,如果未能解决你的问题,请参考以下文章

使用下拉列表在 Java 中创建一个自动完成文本框

成功完成初始自动完成后,如何在 WinForm 文本框上重新启动自动完成?

基于其他事件绑定自动完成文本框

Java Web 技术(JSP 和 servlet)中的 AJAX 自动完成文本框

阅读《Android 从入门到精通》(12)——自动完成文本框

WinForms | C#|文本框中间自动完成?