使用文档侦听器实时显示搜索结果?

时间:2017-06-05 19:15:49

标签: java mysql swing

我有一个显示在JTable中并存储在数据库中的'people'列表。我非常希望用户在输入搜索区域时将结果缩小到该表中。

因此,例如输入'S'会将显示的名称缩小为'Susan','Stephen','Steve',只要您键入'Su',它就会缩小为'Susan'

我正在考虑使用DocumentListener方法.removeUpdate(e).insertUpdate(e)来调用搜索底层数据库并更新表视图的方法 - 但这看起来非常浪费。

实际上,我将创建一个新的数据库连接和其他数据库对象,并在每次输入任何字符时刷新表。我不确定这只是糟糕的设计,还是会让我产生问题的东西?有没有更好的方法来解决这个问题?或者我应该坚持使用普通的搜索按钮?

2 个答案:

答案 0 :(得分:2)

决定取决于您的应用程序和用户要求。有很多应用程序提供与您的类似的自动完成功能。

在没有任何优化的情况下开始,看看它的表现如何。然后,您可以尝试不同的优化步骤,如:

1)在用户键入的内容和搜索请求之间添加等待时间。例如,知道用户最有可能搜索比“S”更具体的文本,等到他们在第二或第二个内输入更多字符。

2)在不同的线程中运行搜索,然后从那里更新表。在用户输入下一次搜索时,可以取消先前的搜索线程。

3)在用户输入时保持数据库连接打开,并在一段规定的时间后关闭(例如5秒)。但不会太久。

答案 1 :(得分:2)

  

我在JTable中显示了“人物”列表

如果所有人都显示在JTable中,那么您可以使用JTable的filtering功能来显示表中的行的子集。

阅读Sorting and Filtering上Swing教程中的部分,了解更多信息和工作示例。