筛选 table 个模型

filtering a table model

我在一个应用程序中有 2 个复选框。 复选框相互独立,即可以选择一个,也可以同时选择两个,也可以都不选择。

复选框筛选 table 模型,table 每 10 秒刷新一次。

在每次刷新之前,我得到每个复选框的状态如下:

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

刷新完成后,我尝试将复选框设置为如下所示:

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

然后是我的 if 语句来找出哪些框被选中,这就是问题所在,因为我似乎无法弄清楚如何应用过滤器 a) 两个复选框都被选中因此显示所有行内容为 "A" 和 "B" b) 选中其中一个复选框 s0 仅显示 "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();
}

我不太理解你的逻辑。但如果你的逻辑是正确的,那么你的问题只是一个简单的错字。您在可能想使用 == 的地方使用了 == 为 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);
}