无论如何我可以在JTable中突出显示一行吗?

时间:2011-04-02 01:44:10

标签: java swing jtable

我目前正在使用JTable和DefaultTableModel构建数据库。在我的计划中我 具有允许用户搜索数据库的功能。我有搜索部分构建,但我没有 知道如何在JTable中突出显示行或单元格。有人可以帮助我吗?

谢谢

3 个答案:

答案 0 :(得分:3)

您确定要突出显示而不是过滤掉无关的结果吗?如果您突出显示,则必须滚动整个列表才能找到所有匹配的结果,而如果您过滤显示,则可以更轻松地找到您要查找的内容。

如果你进入过滤路线,我会查看GlazedLists,这是一个真正优秀的Java库,用于处理JTable的动态过滤,排序等。

如果您仍然想要突出显示路线,那么我看到实现此目的的两种主要方式。第一种是使用JTable的ListSelectionModel并确保所有匹配的行都在选定的集合中;这将使它们以最少的编码在视觉上进行区分。另一方面,只要用户拖入表格并选择其他内容,视觉效果就会丢失。

实现此目的的第二种方法是使用自定义TableCellRenderer,如果行符合您的选择条件,则会更改行的呈现方式。一种简单的方法是改变背景颜色。

答案 1 :(得分:1)

How to Use Tables上的Swing教程有一个关于过滤的部分,因此您可以只显示符合搜索条件的数据。如果您想查看所有数据,那么您只需删除过滤器。

如果你真的想单独突出显示,那么我会看一下Table Row Rendering方法。

答案 2 :(得分:0)

我可以告诉你我是怎么做的。 我将搜索实现为文档中的搜索,即一次查找单个结果。我存储了所选行的当前索引,如果之前没有选择任何行,则从第一个索引开始。然后我让我的模型实现我的界面功能,以搜索下一个或上一个匹配,下面的示例显示使用find next match方法返回找到匹配字符串的表中行的索引,然后我将选择更改为否则我清除选择让用户知道没有匹配。


    int index = serchableTableModel.findNextMatchIndex(serchedText, currentIndex);
    if(index != -1)
    table.changeSelection(index, 0, false, false);
    else
    table.clearSelection();

我希望这能解决你的问题。

注意:我以前不知道上釉的清单,它们看起来很有希望。他们本可以节省我实施表的排序,搜索自己。