2 Stimmen

Wie ersetzt man JTextField als Filter mit String in GlazedList?

Ich habe eine Reihe von Optionsschaltflächen, die ich als Filter für meine Tabelle verwenden möchte. Diese Optionsschaltfläche setzt eine Variable in meiner Modellklasse. Mit einem Getter in meinem Modell rufe ich diesen Wert ab und ich möchte diesen Wert als Filter in meiner GlazedList-Tabelle verwenden.

Weiß jemand, wie man das macht?

Unten ist meine Tabelle mit JTextField als Filter:

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

2voto

arooaroo Punkte 3398

Ich verweise Sie auf die Screencast zum benutzerdefinierten MatcherEditor als eine gute Referenz für die Umsetzung Ihrer eigenen Matcher s, um die Filterung aus einer Reihe von Optionen zu bewältigen.

Der wichtigste Teil ist die Schaffung eines MatcherEditor In diesem Fall wird eine Tabelle mit Personen nach ihrer Nationalität gefiltert.

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

Wie diese MatcherEditor verwendet wird, sollte nicht allzu ungewohnt sein, da es ähnlich ist wie TextMatcherEditor s:

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

In dem obigen Beispiel ist die JComboBox deklariert und in der MatcherEditor selbst. Sie müssen diesen Stil nicht genau befolgen, obwohl Sie einen Verweis auf das zu verfolgende Objekt benötigen. Wenn ich Swing-Steuerelemente beobachte, neige ich dazu, sie mit dem Rest des Formulars zu deklarieren und zu initiieren und dann eine Referenz zu übergeben, z. B.

....
private JComboBox nationalityChooser;
public NationalityMatcherEditor(JComboBox alreadyConfiguredComboBox) {
    this.nationalityChooser = alreadyConfiguredComboBox;
}
....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X