2

我有一个 JFrame,其中有一个表,并且搜索已连接到数据库。我想搜索,但这样做不需要按钮。因此,当我开始在文本字段中填写名称时,搜索将立即完成。就像 html 中的 ajax 一样。这可以在java中完成吗???

4

2 回答 2

3

因此,当我开始在文本字段中填写名称时,搜索将立即完成

您可以通过将 a 附加DocumentListener到 的 来Document对所有输入做出反应JTextField。每次用户向文本字段提供输入时(无论是通过键入、拖放、复制粘贴等),都会通知该侦听器。

然而,关键是您想要对用户输入执行的操作。在DocumentListener事件调度线程上触发,该线程不应被长时间运行的操作阻塞,否则您的 UI 将冻结。执行数据库查询被认为是“长时间运行的操作”。这意味着您必须确保您的搜索是在后台线程上执行的。搜索完成后,您可以更新表,这必须在 Event Dispatch Thread 上完成。该类SwingWorker在这种情况下很有用。有关线程规则的更多信息,请参阅本教程

第二个问题是您可能希望在提供新输入时取消先前的搜索。很可能用户可以更快地键入,然后您可以查询数据库并JTable使用结果填充 a(假设网络连接不是那么快)。

于 2012-11-13T09:31:35.253 回答
1

是的,这可以在 Java 中使用附加到文本字段的 actionListener 来完成。有关actionListener javadocs ,请参见此处。

这里有一个类似的stackoverflow问题:link

于 2012-11-13T06:47:55.110 回答