Java 删除筛选后的Jtable假结果
我的gui中有一个Jtable,我在其中投射了一些结果!我还有3个JCheckbox用作过滤器!问题是,当我第一次检查JCheckBox时,结果被正确过滤,但当我取消选中JCheckBox时,结果与应用过滤器时保持相同,这是我不想看到的 JCheckBox侦听器: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
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或任何其他网站的链接发布你的课程吗。这样我们就可以试着复制你所描述的。这是我的错!问题解决了!!感谢您的解决方案和链接!