再次质疑我的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岁!
答案 0 :(得分:2)
ckeckbox在
JTable
之外,仅用于过滤器......
您可以合并并应用JTable
行过滤器,如here和here所示。使用Action
封装功能,如here所示。让Action
更新模型,监听视图将自行更新。
附录:举一个具体的例子,将example cited中的JButton
更改为JCheckBox
。
frame.add(new JCheckBox(new AbstractAction("Toggle filter")…
答案 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);
}