[英]Java swing toggle button to filter jtable rows
我有一个JTable
,它包含一个自定义AbstractTableModel
,当调用getValueAt
时它返回一个对象。 当然,我有一个自定义的TableCellRenderer
,它能够从对象中获取/构造文本,以便可以显示它。
但是现在我想写一个过滤器。 过滤器将是一个简单的切换按钮。 当它打开时,我希望应用过滤器;当它关闭时,我希望除去过滤器。
由于这个原因,我有两个问题。
首先,我绝对不知道当必须按对象而不是按原语进行过滤时,如何编写过滤器。
其次,我不知道如何将所述过滤器附加到切换按钮以能够打开和关闭它。
如果这是一个迟钝的问题,很抱歉,但是http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting是我看到的最没用的文档,因为没有进行深入的解释。
感谢任何人的帮助。
编辑:该对象包含多个字段,但是我对两个过滤器切换特别感兴趣。 当我说isSuper
,一个返回boolean
值,而当我调用getName
时,第二个返回string
。 如果打开了第一个切换,则它应显示在isSuper
上返回true的所有条目,而第二个切换应显示当我调用getName
时name包含两个单词(包含空格)的所有条目。
首先,我绝对不知道当必须按对象而不是按原语进行过滤时,如何编写过滤器。
您阅读过RowFilter
API吗? 它显示了如何基于自定义对象创建自定义过滤器的示例。
其次,我不知道如何将所述过滤器附加到切换按钮以能够打开和关闭它。
您是否阅读了教程并尝试运行演示? 每次用户更改文本字段中的文本时,本教程将使用DocumentFilter动态更改过滤器。 因此,本教程向您展示了如何根据用户输入动态更改过滤器。 您可以修改代码以在每次按下切换按钮时更改过滤器。
它包含一个自定义的AbstractTableModel,当调用getValueAt时返回该对象。 当然,我有一个自定义的TableCellRenderer,它能够从对象中获取/构造文本,以便可以显示它。
与我的答案无关,但我不太理解那句话。 您是说模型中的每个单元格返回一个不同的对象,还是每个单元格都返回相同的对象,但是您只是为column1,column2,column3等显示了对象的不同属性? 无论哪种方式,听起来都像是一个怪异的设计。 我们可能会提出更好的建议。 发布说明问题的SSCCE。
老实说, JavaDocs的拼写很好。
有了这么少的信息,您最好的概述就是...
TableRowSorter<TableModel> trs = new TableRowSorter<TableModel>();
table.setRowSorter(trs);
// Create the row filder...
trs.setRowFilter(new RowFilter<TableModel, Integer>() {
@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;
}
});
当您想更新过滤器时,只需调用...
trs.sort();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.