【问题标题】:GlazedList - Filter table based on 1 column onlyGlazedList - 仅基于 1 列的过滤表
【发布时间】:2013-05-15 08:58:05
【问题描述】:

我在使用 MVC 模式实现的 Swing 项目中使用 GlazedList 来处理 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);

上面的代码允许我的表根据整个表中存在的所有数据进行过滤。我想要的是一种仅基于一列过滤表的功能。有谁知道如何做到这一点?

【问题讨论】:

    标签: java swing jtable rowfilter glazedlists


    【解决方案1】:

    好吧,对于那些会遇到同样问题的人,我自己通过实验解决了,我发现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());
        }
    

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多