Sortierung von Listen
Eine wesentliche Stärke von Glazed Lists ist die leichte Implementierung der Sortierung. Dazu muss eigentlich nur eine SortedList mit der bestehenden EventList erstellt werden.SortedList<Article> sortedArticleList = new SortedList<Article>(articleList,null);
Soll die Liste anfangs auch sortiert werden, dann muss ein Comparator implementiert und übergeben werden. Anwender sind es gewohnt, dass die markierte Spalte sortiert wird, wenn sie darauf klicken. Dafür existiert der TableComparatorChooser.
new TableComparatorChooser(t, sortedArticleList,true);
Bei der Sortierung kommt das Decorator Pattern zum Einsatz. Sowohl unsere EventList als auch unsere Tabelle wird mit einer Sortierfunktionalität erweitert. Der letzte Boolean-Parameter beim TableComparatorChooser gibt an, ob eine Mehrfachsortierung der Spalten möglich ist oder nicht.
Filterung von Listen
Ein weiteres Muss heutiger Listen ist deren Filterung, d.h. über einen Filter können die Daten in der Liste entsprechend eingeschränkt werden. Wir erweitern nun unsere Liste um eine Filterfunktionalität, möchten dabei aber nicht auf die Sortierung verzichten. Mit Glazed Lists können sehr einfach Pipelines von Listen erstellt werden, d.h. ich kann nun meine SortedList verwenden und diese um eine Filterfunktion ergänzen (Listing 4).Zunächst definieren wir für unseren Filter ein Textfeld für die Filtereingabe. Anschließend wird dieses Textfeld um einen TextComponentMatcherEditor erweitert, welcher die Eingabe des Anwenders entgegennimmt und eine Filterung durchführt. Das TextFilterator Interface definiert dabei, welche Felder unseres Artikels für die Filterung berücksichtigt werden sollen. Der Grund dafür, dass getFilterStrings keine neue Liste (die gefilterte Liste) zurückliefert, ist die Performance, denn gerade bei einer Livesuche entsteht eine Unzahl an Instanzen. Stattdessen wird die baseList immer wieder verwendet, was die Performance der Filterung nicht beeinträchtigt. Zum Schluss wird noch eine FilterList definiert, welche unsere sortierte Liste und den zuvor definierten matcherEditor benötigt.
Listing 4: Filterung von ListenJTextField filterField = new JTextField(30);TextComponentMatcherEditor matcherEditor = new TextComponentMatcherEditor(filterField, new TextFilterator(){public void getFilterStrings(List baseList, Object element) {Article article = (Article)element;baseList.add(article.getTitle());baseList.add(article.getCategory());}});FilterList<Article> filteredArticleList = new FilterList<Article>(sortedArticleList,matcherEditor);
Gruppierung von Listen
Neben Sortierung und Filterung bietet Glazed Lists ein nettes Listenfeature, um Listen zu gruppieren und daraus eindeutige Einträge zu filtern. Betrachten wir unsere Artikelliste. In einem Sportshop gibt es eine Menge an unterschiedlichen Artikeln, wobei die Artikel unterschiedlicher Kategorien auch von der gleichen Marke sein können. Jetzt kann man ohne größere Probleme und Programmieraufwand eine Liste erstellen, welche alle Marken eines Sportshop anzeigt. Dabei greift man auf GroupingList und FunctionList zurück und stellt hierfür einen passenden Comparator zur Verfügung.Features von Glazed Lists
- Filter- und Sortierfunktionen sind einfach zu implementieren
- Concurrency Built-in
- AutoComplete-Support für Spalten
- Einfache Integration mit JFreeChart (Chart kann auf Basis von FunctionLists erstellt werden und ist dabei immer synchron.)
- Hibernate-Integration, um EventLists zu persistieren
Fazit
Glazed Lists ist eine recht schlanke Bibliothek, bietet aber eine Menge an Funktionalität. Leider muss man sagen, dass die Dokumentation dieser Technologie mangelhaft ist. Die Community von Glazed Lists ist aber sehr aktiv und Fragen in den Mailing-Lists werden in kurzer Zeit beantwortet. Die Integration von Glazed Lists in eigene Projekte ist wirklich sehr einfach, und es lohnt sich allemal, einen Blick auf diese Bibliothek zu werfen. Gerade in der Desktopentwicklung sind Tabellen aus heutigen Anwendungen nicht mehr wegzudenken.Zu dem Artikel können Sie hier den Quellcode als zip-Datei downloaden.
Links & Literatur
- java.sun.com/docs/books/tutorial/uiswing/components/table.html
- publicobject.com/glazedlists/
- best-practice-software-engineering.blogspot.com/




