2

テーブルのフィルターとして使用したいラジオボタンのセットがあります。このラジオ ボタンは、モデル クラスに変数を設定します。モデルにゲッターを使用してこの値を取得し、この値を GlazedList テーブルのフィルターとして使用したいと考えています。

それを行う方法を知っている体はありますか?

以下は、フィルターとして JTextField を使用した私のテーブルです。

TextFilterator<Barcode> barcodeFilterator = new TextFilterator<Barcode>() { ... };
    WebTextField searchField = new WebTextField(barcodeModel.getSelectedFilter());
    MatcherEditor<Barcode> textMatcherEditor = new TextComponentMatcherEditor<Barcode>(searchField, barcodeFilterator);
    FilterList<Barcode> filterList = new FilterList<Barcode>(BarcodeUtil.retrieveBarcodeEventList(files), textMatcherEditor);
    TableFormat<Barcode> tableFormat = new TableFormat<Barcode>() { .... };
    EventTableModel<Barcode> tableModel = new EventTableModel<Barcode>(filterList, tableFormat);
    barcodeTable.setModel(tableModel);
4

1 に答える 1

2

一連のオプションからのフィルタリングに対処するために独自の を実装するための良いリファレンスとして、Custom MatcherEditor スクリーンキャストを紹介します。Matcher

重要な部分は の作成です。MatcherEditorこの例では、国民のテーブルを国籍別にフィルタリングしています。

private static class NationalityMatcherEditor extends AbstractMatcherEditor implements ActionListener {
    private JComboBox nationalityChooser;

    public NationalityMatcherEditor() {
        this.nationalityChooser = new JComboBox(new Object[] {"British", "American"});
        this.nationalityChooser.getModel().setSelectedItem("Filter by Nationality...");
        this.nationalityChooser.addActionListener(this);
    }

    public Component getComponent() {
        return this.nationalityChooser;
    }

    public void actionPerformed(ActionEvent e) {
        final String nationality = (String) this.nationalityChooser.getSelectedItem();
        if (nationality == null)
            this.fireMatchAll();
        else
            this.fireChanged(new NationalityMatcher(nationality));
    }

    private static class NationalityMatcher implements Matcher {
        private final String nationality;

        public NationalityMatcher(String nationality) {
            this.nationality = nationality;
        }

        public boolean matches(Object item) {
            final AmericanIdol idol = (AmericanIdol) item;
            return this.nationality.equals(idol.getNationality());
        }
    }
}

これがどのように使用されるかは、 sMatcherEditorに似ているため、あまりなじみがないはずです。TextMatcherEditor

EventList idols = new BasicEventList();
NationalityMatcherEditor nationalityMatcherEditor = new NationalityMatcherEditor();
FilterList filteredIdols = new FilterList(idols, nationalityMatcherEditor);

上記のサンプルでは、JComboBox​​ が宣言され、MatcherEditorそれ自体で開始されます。追跡しているオブジェクトへの参照が必要ですが、そのスタイルに正確に従う必要はありません。私の場合、Swing コントロールを見ていると、フォームの残りの部分を宣言して開始し、次に参照を渡す傾向があります。

....
private JComboBox nationalityChooser;
public NationalityMatcherEditor(JComboBox alreadyConfiguredComboBox) {
    this.nationalityChooser = alreadyConfiguredComboBox;
}
....
于 2012-07-06T09:43:20.107 に答える