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;
}
....