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 extends TableModel, ? extends Integer> 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。