Grafische Oberflächen (GUI)

Anfang  Zurück  Vor

Letzte Änderung 17.04.2013

 

 

Swing

 

Die mit XDEV 5 erstellten Oberflächen basieren auf Java Swing. Swing ist eine Grafikbibliothek zum Programmieren von grafischen Oberflächen und gilt seit der Einführung im Jahre 1998 als De-facto-Standard für die GUI-Entwicklung in Java. Swing baut auf dem Vorgänger AWT (Abstract Window Toolkit) auf. Swing ist sehr modular aufgebaut und gut erweiterbar, gilt als ausgereift und eignet sich daher sehr gut für die Entwicklung komplexer Benutzeroberflächen. Alternativen zu Swing sind u.a. SWT und JavaFX.

 

Swing-Komponenten werden als Lightweight-Komponenten bezeichnet, da Swing nicht die nativen Komponenten verwendet, die das jeweilige Betriebssystem zur Verfügung stellt, sondern alle Komponenten selber rendert. Der Vorteil dabei ist, dass Swing-Controls auf allen Plattformen gleich aussehen und sich gleich verhalten.

 

 

 

Look-and-Feel

 

Für das Erscheinungsbild und Verhalten aller Swing-Komponenten ist das sogenannte Look-and-Feel zuständig. Standardmäßig stellt Swing folgende Look&Feels zur Verfügung:

Motif

Metal

Ocean

Synth (ab Java 5)

Nimbus (ab Java 6)

Windows (angepasst)

Mac (angepasst)

Linux Gtk (angepasst)

In XDEV 5 stehen Ihnen dagegen 28 Look&Feels zur Verfügung.

 

Neben Controls bietet Swing weitere wichtige Komponenten für die GUI-Entwicklung, u.a.

Tastenkombinationen

Drag and Drop

Tooltips

Double Buffering

Layout-Manager

 

 

 

Swing-Komponenten

 

Die Bezeichnung aller Swing-Komponenten beginnt mit dem Buchstaben J, z.B. JTable. Die Komponenten lassen sich in folgende Kategorien unterteilen:

Komponenten ohne Model - Einfache Controls, z.B. JButton, JToggleButton, JLabel etc.

Komponenten mit Model - Komplexe Komponenten, z.B. JTable, JTree etc.

 

Swing-Komponenten u.a.:

Top-Level-Container - JFrame, JDialog, JWindow, JApplet

Allgemeine Container - JPanel, JScrollPane, JSplitPane, JTabbedPane, JLayeredPane, JDesktopPane, JInternalFrame, JToolBar, JPopupMenu

Einfache Komponenten - AbstractButton, JButton, JToggleButton, JCheckBox, JRadioButton, JSeparator, JLabel, JFileChooser, JColorChooser, JOptionPane, JToolTip

Menüs - JMenuBar, JMenuItem, JCheckBox, JRadioButtonMenuItem

Komplexe Komponenten - JComboBox, JList, JProgressBar, JSlider, JSpinner, JTable, JTree, JTextField, JPasswordField, JFormattedTextField, JTextArea, JEditorPane, JTextPane

 

Sämtliche GUI-Komponenten in XDEV 5 sind von Swing-Komponenten abgeleitete Komponenten und beginnen deshalb mit dem Präfix Xdev, z.B. XdevTable. Die Verwendung von Swing-Standard-Komponenten und Kombination mit Xdev-Komponenten ist bei Bedarf jederzeit problemlos möglich.

 

 

 

Model-View-Controller

 

Swing basiert auf dem Model-View-Controller (MVC) Konzept, das die Unterteilung einer GUI-Komponente in 3 strikt von einander getrennte Bestandteile vorsieht:  

Model - Enthält die Daten.

View - Zeigt die Daten aus dem Model auf der Benutzeroberfläche an, z.B. in einer XdevTable.

Controller - Registriert Ereignisse auf der GUI-Komponente und reagiert darauf, indem z.B. Änderungen am Model oder an der View durchgeführt werden, z.B. Hervorhebung selektierter Zeilen, Sortierung oder Filterung der Daten, etc.

Um die Komplexität zu reduzieren, wurden in Swing View und Controller zu einer Einheit zusammengefasst.

 

Alle komplexen Swing-Komponenten, u.a. JComboBox, JTable, JTree etc., haben auf Grund ihrer speziellen Eigenschaften ihr eigenes, spezielles Model. Zudem lässt sich das Aussehen einzelner Zellen mit Hilfe eines Renderers festlegen und für die Eingabe von Daten können je nach Datentyp geeignete Editoren implementiert werden, z.B. JTextField für Strings, JComboBox für Integer-Werte die einen Foreign-Key repräsentieren usw.

 

Der Vorteil dieser Trennung ist die Aufteilung des Codes in unabhängige Klassen. Dies verbessert die Wartbarkeit und Erweiterbarkeit  und ermöglicht es, jede Schicht bei Bedarf austauschen zu können, was Swing sehr flexibel macht. Zum Beispiel lässt sich die View jederzeit durch ein anderes Look-and-Feel ersetzen. Durch den Austausch des Models lassen sich mit ein und derselben GUI-Komponente völlig andere Daten anzeigen und auch der Zugriff mehrerer Komponenten auf ein und dasselbe Model ist problemlos möglich.

 

Diese enorme Flexibilität ist gleichzeitig aber auch der Nachteil von Swing, wodurch die konventionelle GUI-Programmierung mit Swing als sehr komplex gilt.

 

 

 

Universal-Model Virtuelle Tabelle vereinfacht Swing radikal

 

Um die GUI-Entwicklung zu vereinfachen, wurde in XDEV 5 die MVC-Programmierung vollständig automatisiert. Alles was eine GUI-Komponente benötigt, wie Model, Renderer und Editoren, wird automatisch von einer Virtuellen Tabelle zur Verfügung gestellt. Einfach ausgedrückt haben damit alle GUI-Komponenten ein und dasselbe Model. Die Verknüpfung einer GUI-Komponente mit einer Virtuellen Tabelle erfolgt entweder im GUI-Builder per Drag and Drop oder programmatisch mit der Methode setModel( ), die jede Xdev-GUI-Komponente zur Verfügung stellt.

 

 

MVC_Schaubild

 

 

Wichtig: In XDEV 5 ist für alle GUI-Komponenten die Datenquelle eine Virtuelle Tabelle (VT), da diese für alle GUI-Komponenten passende Models und ggf. Renderer und Editoren zur Verfügung stellt.

 

 

 

XDEV 5 GUI-Komponenten

 

Der XDEV 5 GUI-Builder verwendet nicht die Standard-Komponenten-Palette von Java Swing (u.a. JButton, JTable, JTree, etc.), sondern eine von den Swing-Komponenten abgeleitete Komponenten-Palette, deren Klassennamen jeweils mit dem Kürzel Xdev beginnt (u.a. XdevButton, XdevTable, XdevTree etc.). D.h., für XDEV 5 wurde eine vollständig neue GUI-Komponenten-Palette eingeführt. Anders als die Standard-Komponenten von Swing sind sämtliche Xdev-Komponenten eng mit dem XDEV Application Framework verzahnt, sodass Sie die zahlreichen Funktionen des XDEV 5 nutzen können, ohne diese programmatisch einbinden zu müssen.

 

Die Xdev-Komponenten lassen sich wiederum bei Bedarf erweitern, bis hin zur Einführung einer eigenen GUI-Komponenten-Palette, was bei größeren Projekten oft der Fall ist. Auch die Verwendung von Swing-Standard-Komponenten sowie externer GUI-Beans ist kein Problem. Jede GUI-Komponente fügt sich nahtlos in die Komponenten-Palette des GUI-Builders ein und verhält sich auch genauso wie ein Xdev-Komponente.

 

 

Tipp: Wenn Sie in Ihren Projekten mehrere Xdev-Komponenten mit eigener Funktionalität erweitern, sollten Sie ebenfalls eine eigene GUI-Bean-Schicht einführen. Auch Ihre eigenen GUI-Beans werden in der Komponenten-Palette des GUI-Builders angezeigt und integrieren sich damit nahtlos in die XDEV 5 IDE.