2014-02-06 65 views
1

再次询问我的Jtable!我用JCheckBoxes过滤结果!当我检查一个复选框时,结果是可以的,但是当我检查两个或多个结果时,出现结果并且按照最后一个JCheckBox的过滤器而不是所有选中的JCheckBox的过滤器。重要的是要说所有复选框都指向表格的一列,并且在表格之外,并且仅用于过滤其中的结果。使用多个Jcheckbox的JTable过滤器

我的过滤功能是本

private void newFilter(String age){ 
    RowFilter<DefaultTableModel,Object> rf = null; 
    try{ 
     rf = RowFilter.regexFilter("20"); 
     }catch(java.util.regex.PatternSyntaxException e){ 
     return; 
    } 
    sorter.setRowFilter(rf); 
} 

编辑:在表中只有结果,应该出现! ckeckboxes在Jtable之外,仅用于过滤器,例如,如果我选中表格中的复选框20,将只显示年龄为20岁的人,但如果我检查20岁和40岁的表格,则只会显示与40岁,也是20岁!

+0

像[这](HTTP:/ /stackoverflow.com/a/4528604/230513)或者[this](http://stackoverflow.com/a/17856131/230513)? – trashgod

+0

@trashgod他们都不是!在表中只有结果,应该出现! ckeckboxes在Jtable之外,仅用于过滤器,例如,如果我选中表格中的复选框20,将只显示年龄为20岁的人,但如果我检查20岁和40岁的表格,则只会显示与40岁,也是20岁! – gimbo

+0

请更新您的问题以包含此说明。 – trashgod

回答

2

的ckeckboxes是JTable外,仅被用于过滤器...

您可以组合,如图所示herehere适用JTable行筛选。使用Action来封装功能,如here所示。让Action更新模型,并且侦听视图将自行更新以作为响应。

附录:作为具体例,在example cited改变JButtonJCheckBox

frame.add(new JCheckBox(new AbstractAction("Toggle filter")… 

image

+0

我已经看到了Java教程,但我没有找到解决方案:S – gimbo

+0

另外您还提供了有关其他内容的解决方案,我想!不能碰到任何东西! – gimbo

+0

我认为我不清楚...我可以用一个复选框过滤表格,问题是当我尝试用两个或多个复选框过滤它时!如果您可以将我的代码转换为我所说的话,我将不胜感激!否则提供给我其他更简单的例子! – gimbo

0

以在关注@trashgod最后评论我来到翻过,改变了我的过滤器这样的,现在,它完美的作品:

private void newFilter() { 
    RowFilter<Object, Object> rf = null; 
    List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(
      2); 
     if (c20.isSelected()) { 
      filters.add(RowFilter.regexFilter("20")); 
     } 
     if (c40.isSelected()) { 
      filters.add(RowFilter.regexFilter("40")); 
     } 

    try { 
     rf = RowFilter.orFilter(filters); 
    } catch (java.util.regex.PatternSyntaxException e) { 
     return; 
    } 
    sorter.setRowFilter(rf); 
}