过滤表模型

时间:2016-04-27 21:37:43

标签: java swing jtable tablerowsorter

我在应用程序中有2个复选框。 复选框彼此独立,即可以选择一个复选框,也可以选择两个复选框,或者都不能选择。

复选框过滤表格模型,表格每10秒刷新一次。

每次刷新之前,我都会按如下方式获取每个复选框的状态:

checkM = checkboxM.isSelected();
checkI = checkboxI.isSelected();

刷新完成后,我尝试将复选框设置为以下内容:

checkboxM.setSelected(checkM);
checkboxI.setSelected(checkI);

然后是我的if语句,找出哪些框被选中,这就是问题所在,因为我似乎无法解决如何应用过滤器a)两个复选框都被选中因此显示所有包含内容的行" A"和" B" b)选中其中一个复选框,仅选择" A"或" B"显示或没有显示行

if ((checkM = false) || (checkI = false)){
newFilter("",4);   
}

else{
 newFilter("A",4);
newFilter("B",4);


}



//this is my filter

private void newFilter(String x, Integer n) {
sorterDG = new TableRowSorter (modelImbalanceTable);
sorterDG.setRowFilter(RowFilter.regexFilter(x,n));
tableDG.setRowSorter(sorterDG);
tableDG.tableChanged(new TableModelEvent(tableDG.getModel())) ;
tableDG.repaint();
}

1 个答案:

答案 0 :(得分:4)

我并不真正遵循你的逻辑。但如果你的逻辑是正确的,你的问题只是一个简单的错字。您使用了=,您可能希望使用===为checkM和checkI分配新值,同时评估设置值。 ==会比较该值。除此之外,比较一个布尔值来获得一个布尔值并没有多大帮助。只需按原样使用布尔值。

但是,这意味着您目前始终执行else路径而不是if路径。在if路径中,您有下一个问题。您不会累积过滤器,但首先设置过滤器A,然后设置B。因此,在运行时,无论您检查了什么,都将始终对B进行过滤。

你可能意味着像

if (checkM && checkI) {
    newFilter("A|B", 4);
} else if (checkM) {
    newFilter("A", 4);
} else if (checkI) {
    newFilter("B", 4);
} else {
    newFilter("", 4);
}