0

MVC パターンを使用して実装された Swing プロジェクトで JTables を処理するために GlazedList を使用しています。テーブルにフィルタリング機能を組み込むために、コントローラーに次のコードがあります。

    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);

上記のコードにより、テーブル全体に存在するすべてのデータに基づいてテーブルをフィルタリングできます。私が欲しいのは、1 つの列のみに基づいてテーブルをフィルタリングする機能です。これを達成する方法を知っている人はいますか?

4

1 に答える 1

0

同じ問題に遭遇する人のために、私は自分で実験して解決しました。実際には、がフィルタリング ジョブを実行するbaseListString のリストであることがわかりました。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());
    }
于 2013-05-16T01:50:10.287 に答える