使用多个Jcheckbox的JTable过滤器

时间:2014-02-06 18:33:20

标签: java swing jtable jcheckbox rowfilter

再次质疑我的Jtable!我用JCheckBoxes过滤结果!当我选中一个复选框时,结果是正常的,但当我检查两个或多个结果时,会显示最后一个JCheckBox的过滤器,而不是所有已检查的JCheckBox的过滤器。重要的是要说所有复选框都指向表格的一列,并且在表格之外,仅用于过滤结果。

我的过滤功能就是这个

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

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

2 个答案:

答案 0 :(得分:2)

  

ckeckbox在JTable之外,仅用于过滤器......

您可以合并并应用JTable行过滤器,如herehere所示。使用Action封装功能,如here所示。让Action更新模型,监听视图将自行更新。

附录:举一个具体的例子,将example cited中的JButton更改为JCheckBox

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

image

答案 1 :(得分: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);
}