Swing vs SwingX

java Package javax.swing

Quelle wikipedia : Swing ist ein UI-Paket/Package in Java. Es gehört zu den Java Foundation Classes (JFC), die eine Sammlung von Bibliotheken zur Programmierung von grafischen Benutzerschnittstellen UI bereitstellen. Swing baut auf dem älteren AWT auf und ist mit den AWT APIs verwoben.

Quelle oracle/javase/8 : Provides a set of "lightweight" components that, to the maximum degree possible, work the same on all platforms. For a programmer's guide to using these components, see Creating a GUI with JFC/Swing, a trail in The Java Tutorial.

SwingX Package org.jdesktop

Quelle rheinwerk-verlag.de tutego.de : Die SwingX-Bibliothek erweitert Swing und füget Funktionalität hinzu und stellt ganz neue UI-Komponenten bereit, etwa eine Mischung aus Tabelle und Baum (JXTreeTable).

Quelle javabeginners.de : SwingX ist ein Java-Package org.jdesktop von SwingLabs, das auf Swing aufsetzt und eine Reihe von Komponenten bereitstellt, die die Swing-Bibliothek erheblich erweitern und ergänzen.

Nach der Übernahme von Sun durch Oracle wurden alle SwingLabs Projekte gestoppt und die Server java.net abgeschaltet. Der Code wurde als open source gerettet.

VDate vs JXDatePicker

Ein konkretes Beispiel, das die Erweiterungen in SwingX zeigt, ist die Klasse org.jdesktop.swingx.JXDatePicker. JXDatePicker erlaubt Datumseingabe im Textfeld mit Popup-Menü. Im Adempiere swing Client gibt es eine ähnliche Funktionalität, die mit viel Programmieraufwand erstellt wurde. Es sind die Klassen org.compiere.grid.ed.VDate und Calendar:

Zum Vergleich ein Demo Screenshot mit JXDatePicker:

Alternative zu VCheckBox

Yes-No Datentypen werden in (swing) durch org.compiere.grid.ed.VCheckBox implementiert, das von javax.swingJCheckBox abgeleitet ist. Der Renderer für die Darstellung ist gleichzeitig Editor für die Eingabe. Diese Entwurfsentscheidung impliziert zwei Werte, eben die Yes-No-Werte.

Yes-No Datentype werden auch als Auwahlfelder genutzt. Zum Beispiel in Infofenstern. Es ist bei diesen Auswahlen nicht möglich, beide Werte zu selektieren. Zur Lösung gibt es die Listenreferenz Yes-No, die auch optional, also ohne konnkreten Wert genutzt werden kann.

Seit in Unicode 6.0 sind Emojis einheitlich kodiert und als UTF-Zeichen verfügbar. Das ist eine mögliche Alternative zur swing Darstellung. Es gibt mehrere Möglichkeiten, nur ein Beispiel:

  • leer für Auswahl any/unknown

  • ⬜ U+2B1C für No

  • ✅ U+2705 für Yes , alternativ ✔️ U+2714

So kann die Listenreferenz und der Renderer für Felder einheitlich gestaltet werden. Mit VCheckBox und VComboBox läßt sich das aber nicht implementieren. Statt VCheckBox wurde JRendererLabel (Codeschnipsel), statt VComboBox eine Subklasse von JXComboBox verwendet. Beide Klassen gehören zum SwingX-Paket.

    		int displayType = field.getDisplayType();
			switch(displayType) {
			...
			case DisplayType.YesNo:    // 20
				cellRendererComponent = getRenderer_YesNo(value, field);
			...
			
    // emojis for No:
    static final String white_large_square = "\u2B1C";
    // for Yes:    
    static final String heavy_check_mark = "\u2714";

    Component getRenderer_YesNo(Object value, GridField field) {
    	JRendererLabel jrl = new JRendererLabel();
    	if((Boolean)value) {
    		jrl.setText(heavy_check_mark);
    	} else {
    		jrl.setText(white_large_square);
    	}
    	jrl.setHorizontalAlignment(SwingConstants.CENTER);
    	return jrl;
    }

andere Beispiele

  • JXCollapsiblePane ist von JPanel abgeleitet. Es bietet dessen Funktionalität, kann jedoch bei Bedarf animiert unsichtbar gesetzt werden.

  • JXFrame ist von JFrame abgeleitet, kann einen solchen problemlos ersetzen und stellt einige Erweiterungen, wie eine StatusBar und einen Zugriffstimer bereit.

  • JXTaskPane ist ist ein Container mit dem die schrittweise Abarbeitung von Aufgaben vorgegeben werden kann. Mehrere JXTaskPane werden üblicher- aber nicht norwendigerweise in einem JXTaskPaneContainer zusammengefasst.

  • JXTitledPanel ist von JPanel und JXPanel abgeleitet. Es besitzt eine Titelzeile und einen separat konfigurierbaren Inhaltsbereich.

Last updated