Illustration einer tropischen Insel mit Palmen und einem hohen Berg

Java Blog für Programmierer

Inselraus: Die Zusatzkomponentenbibliothek SwingX

· Christian Ullenboom

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 bzw.
  • 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. Das ist aber bisher nicht passiert, nur eine Komponente hat es – wen auch abgewandelt – in die Standardbibliothek geschafft.

Hinweis: Aktiv wird SwingX nicht mehr weiterentwickelt.

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 wird auf die Web-Startapplikation verlinkt (http://swinglabs-demos.java.net/demos/swingxset6/swingxset.jnlp).

Überblick über erweiterte Standard-Swing-Klassen

SwingX nimmt einige Klassen als Basisklassen und fügt Funktionalität hinzu. Die Standardkomponenten lassen sich problemlos gegen die neuen Klassen austauschen.

SwingX-KlasseSwing-BasisklasseAufgabeJXButtonJButtonSchaltfläche mit Unterstützung für PainterJXLabelJLabelBeschriftung mit Unterstützung für PainterJXTableJTablestark erweiterte Tabelle mit Suche, Sortierung, Filterung, …JXListJListstark erweiterte Liste mit Suche, Sortierung, Filterung, …JXTreeJTreestark erweiterter Baum mit Suche, Filterung, …JXFrameJFrameFenster mit optionaler Statuszeile, Warte-zustand, …JXDialogJDialogVereinfacht den Aufbau von Dialogen.JXPanelJPanelPanel mit Transparenz und PainterJXEditorPaneJEditorPaneverbesserte Editor-Funktionalität, Undo/Redo und SucheJXComboBoxJComboBoxVerbessert den Edit-Modus beim Einsatz in einer Tabelle.JXFormattedTextFieldJFormattedTextFieldUnterstützt Prompts und Buddies in formatierten Textzeilen.JXTextAreaJTextAreaUnterstützt Prompts und Buddies in Text-bereichen.JXTextFieldJTextFieldUnterstützt Prompts und Buddies in Text-zeilen.JXRootPanelJRootPanelWurzelkomponente mit Symbolleiste und Statuszeile

Erweiterte Standard-Swing-Klassen

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 nötig sind, etwa von JButton oder JLabel, nur wenn in den Zeichenprozess eingegriffen werden soll.
  • Prompts und Buddies zeigen bei JXTextField, JXFormattedTextField und JXTextArea Eingabehinweise oder Fehler.

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-KlasseSwing-BasisklasseAufgabeJXDatePickerJComponentDatumseingabe im Textfeld mit Popup-MenüJXHyperlinkJButtonHyperlinkJXBusyLabelJLabelAnimation für LadeprozesseJXTreeTableJXTableVerschmilzt Tabelle und Baum.JXStatusBarJComponentStatuszeile, in der Regel unten am FensterJXErrorPaneJComponentDarstellung von FehlermeldungenJXMultiThumbSliderJComponentSlider mit zwei KnöpfenJXMonthViewJComponentZeigt Monatskalender und erlaubt Monats-auswahl.JXSearchFieldJXTextFieldTextfeld mit kleinem Such-IconJXRadioGroupJPanelVereinfacht die ButtonGroup.JXMultiSplitPaneJPanelgeschachtelte Split-PanelsJXCollapsiblePaneJXPanelanimierte ausfaltbare PanelsJXTaskPaneJXPanelTitel mit Icon zum Ausfalten der Container-elementeJXTaskPaneContainerJXPanelContainer für mehrere JXTaskPanesJXTipOfTheDayJXPanelGibt den „Tipp des Tages“ aus.JXTitledPanelJXPanelPanel mit ÜberschriftJXTitledSeparatorJXPanelTrennlinie mit TextJXImageViewJXPanelZeigt ein Bild, ein neues kommt mit Drag & Drop.JXColorSelectionButtonJButtonZeigt bei Aktivierung einen Farbauswahldialog.JXGradientChooserJXPanelPanel zum Aufbau eines Farbverlaufs (-Gradient)JXGraphJXPanelZeichnet 2D-Graphen.

Neue Klassen, die SwingX bietet

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.

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.

SwingX-Installation

Wer SwingX einsetzen möchte, der lädt von das Java-Archiv swingx-all-1.6.4.jar (etwa 1,4 MiB) herunter und bindet es in den Klassenpfad ein. Auf den Seiten sind auch die Quellen und die Java-API-Dokumentation verlinkt. Nach dem Einbinden stehen die neuen Klassen unter dem Paket org.jdesktop.swingx zur Verfügung.

Kategorien: Swing

1 Kommentare

L-ectron-X ·

Es ist auch möglich, die SwingX-Komponenten mit Matisse dem GUI-Builder von Netbeans zu verwenden und sich so GUIs zusammenzuklicken. ...ist zwar nicht meine bevorzugte Art und Weise GUIs zu bauen, wollte es aber mal hier erwähnen. Ein etwas älterer Beitrag dazu lässt sich auf Byte-Welt finden: http://forum.byte-welt.net/sonstiges/byte-welt-fundgrube/541-swingx-components-netbeans-installieren.html

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

← Alle Beiträge