2011-04-02 43 views

回答

3

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

如果你走过滤路线,我会考虑GlazedLists,这是一个非常棒的Java库,用于处理诸如动态过滤,排序等JTables。

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

完成此操作的第二种方法是使用自定义TableCellRenderer,如果行符合您的选择标准,则会更改行的呈现方式。一个简单的方法可以改变背景颜色。

+0

如果我继续使用过滤器位,我如何确保当用户完成后,过滤器将停止并显示正常结果? – 2011-04-02 01:58:46

+1

GlazedLists允许您在绑定给定的JTextField后实时查看过滤器更新。因此,只要清除过滤器(即通过选择所有文本并按删除,或仅按退格键),整个表格就会再次显示。 – I82Much 2011-04-02 02:06:15

1

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

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

0

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


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

我希望这可以解决您的问题。

注意:之前我并没有意识到上面列出的列表,他们确实看起来很有希望。他们可以帮助我实现对表格的排序,搜索自己。

相关问题