9.28 Die Zusatzkomponentenbibliothek SwingX
Für ernsthafte grafische Oberflächen mit Swing sind die Standardkomponenten der Java SE etwas mau. Wichtige Komponenten wie ein Datumsauswahldialog fehlen, zum Teil sind die angebotenen Komponenten nicht leistungsfähig genug. So kann beispielsweise die Swing-Textkomponente zwar einfaches HTML darstellen, scheitert aber an komplexeren Dokumenten mit CSS. Da die Java Foundation Classes in den letzten Jahren sehr stabil geblieben sind – es gab keine großen Änderungen oder nennenswerte neue Komponenten –, bleibt Entwicklern nichts anderes übrig, als entweder
- die benötigten Swing-Komponenten selbst zu entwickeln oder
- sich im Open-Source-Umfeld umzuschauen beziehungsweise
- eine kommerzielle Swing-Komponentenbibliothek einzukaufen.
Wie üblich ist die Eigenentwicklung immer nur die letzte Option. Im Laufe der letzten Jahre haben sich einige sehr gute quelloffene Swing-Zusätze etabliert. Hervorzuheben ist SwingX, ein Projekt, von dem lange Zeit gedacht wurde, dass die Komponenten in das javax.swing-Paket aufgenommen würden.
9.28.1 Im Angebot: Erweiterte und neue Swing-Komponenten
Die SwingX-Bibliothek erweitert Swing auf zwei Arten:
- Einige SwingX-Komponenten erweitern die Standard-Swing-Komponenten und fügen Funktionalität hinzu. So ist JXFrame eine Unterklasse von JFrame und kann zum Beispiel eine Statuszeile haben. Oder JXTable ist eine Unterklasse von JTable mit zusätzlicher Suchfunktionalität und dem Vorteil, dass sich Spalten automatisch ein-/ausblenden lassen.
- SwingX definiert ganz neue Swing-Komponenten, etwa eine Mischung aus Tabelle und Baum (JXTreeTable), ausfaltbare Container oder einen Login-Dialog.
Um einen ersten Überblick über SwingX zu bekommen, lohnt es sich, einen Blick auf das SwingX-Demo zu werfen. Auf der SwingX-Homepage https://swingx.dev.java.net/ wird auf die Web-Start-Applikation verlinkt (https://swinglabs-demos.dev.java.net/demos/swingxset6/swingxset.jnlp).
9.28.2 Überblick über erweiterte Standard-Swing-Klassen
SwingX nimmt einige Klassen als Basisklassen und fügt Funktionalität hinzu. Die Standard-Komponenten lassen sich problemlos gegen die neuen Klassen austauschen.
SwingX-Klasse | Swing-Basisklasse | Aufgabe |
JXButton |
JButton |
Schaltfläche mit Unterstützung für Painter |
JXLabel |
JLabel |
Beschriftung mit Unterstützung für Painter |
JXTable |
JTable |
Stark erweiterte Tabelle mit Suche, Sortierung, Filterung, ... |
JXList |
JList |
Stark erweiterte Liste mit Suche, Sortierung, Filterung, ... |
JXTree |
JTree |
Stark erweiterter Baum mit Suche, Filterung, ... |
JXFrame |
JFrame |
Fenster mit optionaler Statuszeile, Wartezustand, ... |
JXDialog |
JDialog |
Vereinfacht den Aufbau von Dialogen. |
JXPanel |
JPanel |
Panel mit Transparenz und Painter |
JXEditorPane |
JEditorPane |
Verbesserte Editor-Funktionalität, Undo/Redo und Suche |
JXComboBox |
JComboBox |
Verbessert den Edit-Modus beim Einsatz in einer Tabelle. |
JXFormattedTextField |
JFormattedTextField |
Unterstützt Prompts und Buddies in formatierten Textzeilen. |
JXTextArea |
JTextArea |
Unterstützt Prompts und Buddies in Textbereichen. |
JXTextField |
JTextField |
Unterstützt Prompts und Buddies in Textzeilen. |
JXRootPanel |
JRootPanel |
Wurzelkomponente mit Symbolleiste und Statuszeile |
Die Klassen JXTable, JXList, JXTreeTable sind sehr leistungsfähig und daher mit einem kleinen Satz kaum zu beschreiben. Die API-Dokumentation gibt mehr Informationen. Wichtig sind dabei Klassen aus dem Paket org.jdesktop.swingx.decorator, die für JXTable, JXTreeTable, JXTree und JXList Sortierung, Filterung und Hervorhebung unterstützen.
In den Zellen tauchen zudem die Begriffe Painter, Prompt und Buddy auf:
- Ein Painter ist ein Objekt, das an die SwingX-Komponente gesetzt wird. Zum Zeichnen greift die SwingX-Klasse auf das externe Zeichenobjekt zurück. Der Vorteil ist, dass so keine Unterklassen, etwa von JButton oder JLabel, nötig sind, nur wenn in den Zeichenprozess eingegriffen werden soll.
- Prompts und Buddies zeigen bei JXTextField, JXFormattedTextField und JXTextArea Eingabehinweise oder Fehler.
9.28.3 Neue Swing-Klassen
Zusätzlich zu den Erweiterungen der Standard-Swing-Komponenten bietet SwingX weitere Komponenten. Manche sind dringend nötig, etwa zur Auswahl eines Datums, einige sind sehr speziell, etwa zum Zeichnen eines 2D-Graphen.
SwingX-Klasse | Swing-Basisklasse | Aufgabe |
JXDatePicker |
JComponent |
Datumseingabe im Textfeld mit Popup-Menü |
JXHyperlink |
JButton |
Hyperlink |
JXBusyLabel |
JLabel |
Animation für Ladeprozesse |
JXTreeTable |
JXTable |
Verschmilzt Tabelle und Baum. |
JXStatusBar |
JComponent |
Statuszeile, in der Regel unten am Fenster |
JXErrorPane |
JComponent |
Darstellung von Fehlermeldungen |
JXMultiThumbSlider |
JComponent |
Slider mit zwei Knöpfen |
JXMonthView |
JComponent |
Zeigt Monatskalender und erlaubt Monatsauswahl. |
JXSearchField |
JXTextField |
Textfeld mit kleinem Such-Icon |
JXRadioGroup |
JPanel |
Vereinfacht die ButtonGroup. |
JXMultiSplitPane |
JPanel |
geschachtelte Split-Panels |
JXCollapsiblePane |
JXPanel |
animierte ausfaltbare Panels |
JXTaskPane |
JXPanel |
Titel mit Icon zum Ausfalten der Containerelemente |
JXTaskPaneContainer |
JXPanel |
Container für mehrere JXTaskPanes |
JXTipOfTheDay |
JXPanel |
Gibt den »Tipp des Tages« aus. |
JXTitledPanel |
JXPanel |
Panel mit Überschrift |
JXTitledSeparator |
JXPanel |
Trennlinie mit Text |
JXImageView |
JXPanel |
Zeigt ein Bild, ein neues kommt mit Drag & Drop. |
JXColorSelectionButton |
JButton |
Zeigt bei Aktivierung einen Farbauswahldialog. |
JXGradientChooser |
JXPanel |
Panel zum Aufbau eines Farbverlaufs (Gradient) |
JXGraph |
JXPanel |
Zeichnet 2D-Graphen. |
Zur Suche gehören noch ein paar andere Komponenten, die nicht aufgeführt sind. Für die JXTable gibt es weiterhin JXTableHeader, was eine Spezialisierung von JTableHeader ist.
9.28.4 Weitere SwingX-Klassen
Des Weiteren gibt es ein paar neue Layoutmanager, etwa HorizontalLayout, VerticalLayout oder StackLayout (setzt alle Komponenten aufeinander). SwingX unterstützt ebenfalls die Tastaturvervollständigung bei Textfeldern und der Combo-Box. Beispiele finden sich im Paket org.jdesktop.swingx.autocomplete.
9.28.5 SwingX-Installation
Wer SwingX einsetzen möchte, der lädt von http://java.net/downloads/swingx/releases/ ein Zip-Archiv wie swingx-1.6.2-bundle.zip. Im Archiv sind die Dokumentation, ein SwingX-Demo und das Wichtigste, das Java-Archiv swingx-x.y.z.jar, das in den Klassenpfad eingebunden werden muss. Anschließend stehen die neuen Klassen unter dem Paket org.jdesktop.swingx zur Verfügung.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.