Java 删除筛选后的Jtable假结果

Java 删除筛选后的Jtable假结果,java,swing,jtable,jcheckbox,Java,Swing,Jtable,Jcheckbox,我的gui中有一个Jtable,我在其中投射了一些结果!我还有3个JCheckbox用作过滤器!问题是,当我第一次检查JCheckBox时,结果被正确过滤,但当我取消选中JCheckBox时,结果与应用过滤器时保持相同,这是我不想看到的 JCheckBox侦听器: cEntertainment.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ int

我的gui中有一个Jtable,我在其中投射了一些结果!我还有3个JCheckbox用作过滤器!问题是,当我第一次检查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);

            }
        }
    });
新筛选方法:

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 newFilter(字符串类型){
RowFilter rf=null;
试一试{
rf=RowFilter.regexFilter(类型);
}catch(java.util.regex.PatternSyntaxException e){
返回;
}
分拣机。设置行过滤器(rf);
}

问题似乎是,选中该复选框后,您从未删除添加到行分拣机的过滤器。这样,无论复选框状态如何,过滤器都将工作。你应该这样做:

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);
}
cEntertainment.addItemListener(新的ItemListener(){
公共无效itemStateChanged(ItemEvent e){
int state=e.getStateChange();
如果(状态==ItemEvent.SELECTED){
...
newFilter(cEntertainment.getText());
}否则{
...
移除过滤器();
}
}
});
...
私有void newFilter(字符串类型){
RowFilter rf=null;
试一试{
rf=RowFilter.regexFilter(类型);
}catch(java.util.regex.PatternSyntaxException e){
返回;
}
分拣机。设置行过滤器(rf);
}
私有void removeFilter(){
分拣机设置行过滤器(空);
}
根据javadoc(备注为我的):

设置筛选器,该筛选器确定应隐藏哪些行(如果有) 从这个角度来看。在排序之前应用过滤器
null
指示应包括模型中的所有值。


1) 你上一个问题没有得到回答的原因是你提供的信息很少。看看2) 使用Java命名约定。变量以小写字母开头。告诉我还应该上传什么?!截图?我已经上传了我认为存在错误的代码!我是新手!请帮帮我!变量已修复!!问题存在!你应该看看这个链接并遵循它的指导原则。你可以通过github或任何其他网站的链接发布你的课程吗。这样我们就可以试着复制你所描述的。这是我的错!问题解决了!!感谢您的解决方案和链接!