2016-04-27 55 views
0

我在应用程序中有2个复选框。 复选框相互独立,即可以选择一个复选框,也可以选择两个复选框,也可以不选择任何一个。过滤表格模型

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

每个刷新之前我得到每个复选框的状态如下:已发生刷新

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

后,我再尝试复选框设置为它们是什么如下:

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

然后这是我的if语句,以找出哪些框被选中,这是问题的出在哪里,因为我似乎无法解决如何应用过滤器a)选中两个复选框,因此显示所有行的内容“A “和”B“b)选择其中一个复选框ed 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(); 
} 
+1

1)你形容的要求或规范,但是没有提出任何问题。你的问题是什么? 2)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 3)使用合乎逻辑的一致形式缩进代码行和块。缩进旨在使代码的流程更易于遵循! –

回答

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); 
} 
+0

@BjörnKautler。当我尝试newFilter(“A”,4),然后继续尝试newFilter(“B”,4)时,问题似乎在于我的else语句。我想要说明用户是否勾选了checkM或checkI,或者选择了两个或两个都选中了。 – Ingram

+0

嗯,我告诉过你,你做得不对。您将始终按照我在答案中所述的方式进入其他路径。此外,只要我理解你的代码,你可能总是只显示“B”值,因为你用'newFilter()'调用你的过滤器。 – Vampire

+0

你能帮忙吗? – Ingram