java - 过滤表模型

标签 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();
}

最佳答案

我不太明白你的逻辑。但如果你的逻辑是正确的,那么你的问题只是一个简单的拼写错误。您在可能想使用 == 的地方使用了 == 为 checkM 和 checkI 分配新值,同时计算设置值。 == 将比较该值。除此之外,比较 boolean 值来获取 boolean 值并没有多大帮助。只需按原样使用 boolean 值即可。

但是,这意味着您当前始终执行 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);
}

关于java - 过滤表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901382/

相关文章:

java - 如何将 JPanel 中的图像添加到 JPanel?

java - 将文本附加到 JTextPane 时,滚动条对于 JTextPane 不可见

java - JFreeChart:如何获取 XYItemEntity 的坐标?

java - 字符串数组解析

java - 在构造函数或声明中初始化类字段?

java - 将日期和时间输入格式化为 Date 对象

java - 如何在特定坐标处以pdf格式导出完整的JTable组件

java - JTable 当前显示多少行?

Java:在后台使用大量行更新 JTable

java - Android:使用 Room 和 Firestore?