【问题标题】:Jtable false results after remove filtering删除过滤后的 Jtable 错误结果
【发布时间】:2014-02-07 00:48:28
【问题描述】:

我的 gui 中有一个 Jtable,我可以在其中投影一些结果!我还有 3 个用作过滤器的 JCheckBoxes!问题是,当我第一次检查 JCheckBox 时,结果被正确过滤,但是当我取消选中 JCheckBox 时,结果与应用过滤器时的结果相同,这是我不想要的!

JCheckBox 监听器:

cEntertainment.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent e){
            int state = e.getStateChange();
            if (state == ItemEvent.SELECTED) {
                man.setEnabled(true);
                woman.setEnabled(true);
                child.setEnabled(true);
                newFilter(cEntertainment.getText());
            } else {
                man.setEnabled(false);
                man.setSelected(false);
                woman.setEnabled(false);
                woman.setSelected(false);
                child.setEnabled(false);
                child.setSelected(false);

            }
        }
    });

newFilter 方法:

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

【问题讨论】:

  • 1) 你最后一个问题没有得到回答的原因是你提供的信息太少了。看How to create a Minimal, Complete, Tested and Readable example。 2)使用Java命名约定。变量以小写字母开头。
  • 告诉我还应该上传什么?!截图?我已经上传了我认为存在错误的代码!我是这里的新手!请帮我 !变量固定!!存在问题!
  • 您应该查看该链接并遵循其指南。
  • 您能否通过 github 或您可能拥有的任何其他网站的链接发布您的课程。这样我们就可以尝试复制您所描述的内容。

标签: java swing jtable jcheckbox


【解决方案1】:

问题似乎是当复选框被选中时,您永远不会删除添加到行排序器的过滤器。这样,无论复选框状态如何,过滤器都将正常工作。你应该这样做:

cEntertainment.addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent e){
        int state = e.getStateChange();
        if (state == ItemEvent.SELECTED) {
            ...
            newFilter(cEntertainment.getText());
        } else {
            ...
            removeFilter();
        }
    }
});

...

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

private void removeFilter() {
    sorter.setRowFilter(null);
}

根据DefaultRowSorter.setRowFilter(RowFilter filter)javadoc(备注是我的):

设置过滤器,确定应隐藏哪些行(如果有) 从视图。在排序之前应用过滤器。 null 的值 表示应包括模型中的所有值。

【讨论】:

  • Mea Culpa(我的错)!问题解决了!!感谢您的解决方案以及链接!
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2011-06-25
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多