Java swing toggle按钮用于过滤jtable行

我有一个JTable ,它包含一个自定义的AbstractTableModel ,它在调用getValueAt时返回一个对象。 当然,我有一个自定义的TableCellRenderer ,它能够从对象获取/构造文本,以便显示它。

但是现在我想写一个filter。 filter将是一个简单的切换按钮。 当它打开时,我希望应用filter,当它关闭时,我想filter被删除。

由于这个原因,我有两个问题。

首先,当你必须按对象而不是基元进行过滤时,我完全不知道如何编写filter。

其次,我不知道如何将所述filter连接到切换按钮,以便能够打开和关闭它。

我很抱歉,如果这是一个迟钝的问题,但http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting是我看到的最无用的文档,因为解释不深入。

感谢任何人的帮助。

编辑:该对象包含多个字段,但我特别感兴趣的是两个filter切换。 当我说isSuper ,一个返回一个boolean值,当我调用getName时,第二个返回一个string 。 如果打开第一个切换,它应该显示在isSuper上返回true的所有条目,第二个切换应该显示当我调用getName时名称被泄露为两个单词(存在空格)的所有条目。

说实话, JavaDocs拼写得很好……

有了这么少的信息,你可以期待的最好的是概述……

 TableRowSorter trs = new TableRowSorter(); table.setRowSorter(trs); // Create the row filder... trs.setRowFilter(new RowFilter() { @Override public boolean include(RowFilter.Entry entry) { boolean include = false; // Returns the value for the specific column... CustomObject value = (CustomObject)entry.getValue(filterColumn); if (filterBySuper) { include = value.isSuper(); } else { include = value.getName().startsWith(fistPart) && value.getName().endWith(lastPart); } return include; } }); 

如果要更新filter,只需调用…

 trs.sort(); 

首先,当你必须按对象而不是基元进行过滤时,我完全不知道如何编写filter。

你读过RowFilter API了吗? 它显示了如何基于自定义Object创建自定义筛选器的示例。

其次,我不知道如何将所述filter连接到切换按钮,以便能够打开和关闭它。

您是否阅读了教程并尝试运行演示? 每次用户更改文本字段中的文本时,本教程都会使用DocumentFilter动态更改filter。 因此,本教程将向您展示如何根据用户输入动态更改filter。 每次按下切换按钮,您都可以修改代码以更改filter。

它包含一个自定义的AbstractTableModel,它在调用getValueAt时返回一个对象。 当然,我有一个自定义的TableCellRenderer,它能够从对象获取/构造文本,以便显示它。

与我的回答无关,但我并不理解这种说法。 您是说模型中的每个单元格都返回一个不同的对象,或者每个单元格是否返回相同的对象,但是您只是为column1,column2,column3等显示该对象的不同属性? 无论哪种方式,它听起来像一个奇怪的设计。 我们可以提出更好的建议。 发布certificate问题的SSCCE。