【发布时间】:2011-04-02 01:44:10
【问题描述】:
我目前正在使用 JTable 和 DefaultTableModel 构建数据库。在我的程序中,我 具有允许用户搜索数据库的功能。我有搜索部分构建,但我没有 知道如何突出显示 JTable 中的一行或一个单元格。有人可以帮帮我吗?
谢谢
【问题讨论】:
我目前正在使用 JTable 和 DefaultTableModel 构建数据库。在我的程序中,我 具有允许用户搜索数据库的功能。我有搜索部分构建,但我没有 知道如何突出显示 JTable 中的一行或一个单元格。有人可以帮帮我吗?
谢谢
【问题讨论】:
您确定要突出显示而不是过滤掉无关的结果吗?如果您突出显示,则必须滚动整个列表才能找到所有匹配的结果,而如果您过滤显示,则更容易找到您要查找的内容。
如果您选择过滤路线,我会考虑 GlazedLists,这是一个真正出色的 Java 库,用于执行 JTables 的动态过滤、排序等操作。
如果您仍然想走高亮路线,那么我认为有两种主要方法可以实现这一目标。第一种是使用JTable的ListSelectionModel,确保所有匹配的行都在选中的集合中;这将使它们以最少的编码在视觉上被区分。另一方面,一旦用户在表格中拖动并选择其他内容,视觉效果就会丢失。
实现此目的的第二种方法是使用自定义TableCellRenderer,如果该行符合您的选择条件,它会更改该行的呈现方式。一种简单的方法是更改背景颜色。
【讨论】:
How to Use Tables 上的 Swing 教程有一个关于过滤的部分,因此您可以只显示符合搜索条件的数据。如果您想查看所有数据,则只需删除过滤器即可。
如果您真的想单独突出显示,那么我会看看Table Row Rendering 方法。
【讨论】:
我可以告诉你我是怎么做的。 我将搜索实现为在文档中进行搜索,即一次查找单个结果。我正在存储所选行的当前索引,或者如果先前未选择任何行,则从第一个索引开始。然后我让我的模型实现我的接口,该接口具有搜索下一个或上一个匹配项的功能,下面的示例显示了使用 find next match 方法返回找到匹配字符串的表中行的索引,然后我将选择更改为否则我清除选择以让用户知道没有匹配项。
int index = serchableTableModel.findNextMatchIndex(serchedText, currentIndex);
if(index != -1)
table.changeSelection(index, 0, false, false);
else
table.clearSelection();
我希望这能解决你的问题。
注意:我以前不知道有上釉的清单,它们看起来确实很有希望。他们会帮我实现表格排序,搜索自己。
【讨论】: