gpt4 book ai didi

java - 删除过滤后 Jtable 结果错误

转载 作者:行者123 更新时间:2023-12-02 06:14:39 26 4
gpt4 key购买 nike

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

最佳答案

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

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(备注是我的):

Sets the filter that determines which rows, if any, should be hidden from the view. The filter is applied before sorting. A value of null indicates all values from the model should be included.

关于java - 删除过滤后 Jtable 结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com