我正在使用GlazedList处理使用MVC模式实现的Swing项目中的JTable。我的控制器中有以下代码,用于在表中包含过滤功能。
final JTextField txtFilter = view.getTxtSearch();
FilterList<E> textFilteredSource = new FilterList<E>(model.getDataTableSource(), new TextComponentMatcherEditor<E>(txtFilter, new TextFilterator<E>() {
public void getFilterStrings(List baseList, E element) {
Person p = (Person) element;
baseList.add(p.getFirstName());
baseList.add(p.getLastName());
baseList.add(p.getBirthDay());
baseList.add(p.getAge());
baseList.add(p.getOccupation());
}
}));
model.setDataTableSource(textFilteredSource);
上面的代码允许我的表根据整个表中的所有数据进行过滤。我想要的是仅基于一列过滤表的功能。有人知道如何做到这一点吗?
答案 0 :(得分:0)
好的,对于那些遇到同样问题的人,我通过实验自己解决了,我发现baseList
实际上是一个字符串列表,其中FilterList
将进行过滤工作。为了满足我的要求,我只是将需要过滤的列值添加到baseList
参数中。
以下代码将根据来自视图的组合框选择索引过滤表。
public void getFilterStrings(List baseList, E element) {
JComboBox cbo = view.getCboSearch();
int selIndex = cbo.getSelectedIndex();
Person p = (Person) element;
if(selIndex == 0)
baseList.add(p.getFirstName());
else if(selIndex == 1)
baseList.add(p.getLastName());
else if(selIndex == 2)
baseList.add(p.getBirthDay());
else if(selIndex == 3)
baseList.add(p.getAge());
else if(selIndex == 4)
baseList.add(p.getOccupation());
}