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

我目前正在使用JTable和DefaultTableModel构建数据库。 在我的程序中,我有一个允许用户搜索数据库的function。 我有搜索部分构建,但我不知道如何突出显示JTable中的行或单元格。 有人可以帮帮我吗?

谢谢

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

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

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

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

关于如何使用表的Swing教程有一个关于过滤的部分,因此您可以只显示符合搜索条件的数据。 如果要查看所有数据,则只需删除filter即可。

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

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

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

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

注意:我以前不知道上釉的清单,它们看起来很有希望。 他们会救我实现表格的排序,自己搜索。