Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Neues in Java 7
2 Threads und nebenläufige Programmierung
3 Datenstrukturen und Algorithmen
4 Raum und Zeit
5 Dateien, Verzeichnisse und Dateizugriffe
6 Datenströme
7 Die eXtensible Markup Language (XML)
8 Dateiformate
9 Grafische Oberflächen mit Swing
10 Grafikprogrammierung
11 Netzwerkprogrammierung
12 Verteilte Programmierung mit RMI
13 RESTful und SOAP Web-Services
14 JavaServer Pages und Servlets
15 Applets
16 Datenbankmanagement mit JDBC
17 Technologien für die Infrastruktur
18 Reflection und Annotationen
19 Dynamische Übersetzung und Skriptsprachen
20 Logging und Monitoring
21 Java Native Interface (JNI)
22 Sicherheitskonzepte
23 Dienstprogramme für die Java-Umgebung
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
Java 7 - Mehr als eine Insel von Christian Ullenboom
Das Handbuch zu den Java SE-Bibliotheken
Buch: Java 7 - Mehr als eine Insel

Java 7 - Mehr als eine Insel
Rheinwerk Computing
1433 S., 2012, geb.
49,90 Euro, ISBN 978-3-8362-1507-7
Pfeil 9 Grafische Oberflächen mit Swing
Pfeil 9.1 Fenster zur Welt
Pfeil 9.1.1 Swing-Fenster mit javax.swing.JFrame darstellen
Pfeil 9.1.2 Fenster schließbar machen – setDefaultCloseOperation()
Pfeil 9.1.3 Sichtbarkeit des Fensters
Pfeil 9.1.4 Größe und Position des Fensters verändern
Pfeil 9.1.5 Fenster- und Dialog-Dekoration, Transparenz *
Pfeil 9.1.6 Die Klasse Toolkit *
Pfeil 9.1.7 Dynamisches Layout während einer Größenänderung *
Pfeil 9.1.8 Zum Vergleich: AWT-Fenster darstellen *
Pfeil 9.2 Beschriftungen (JLabel)
Pfeil 9.2.1 Mehrzeiliger Text, HTML in der Darstellung
Pfeil 9.3 Icon und ImageIcon für Bilder auf Swing-Komponenten
Pfeil 9.3.1 Die Klasse ImageIcon
Pfeil 9.3.2 Die Schnittstelle Icon und eigene Icons zeichnen *
Pfeil 9.4 Es tut sich was – Ereignisse beim AWT
Pfeil 9.4.1 Die Ereignisquellen und Horcher (Listener) von Swing
Pfeil 9.4.2 Listener implementieren
Pfeil 9.4.3 Listener bei dem Ereignisauslöser anmelden/abmelden
Pfeil 9.4.4 Adapterklassen nutzen
Pfeil 9.4.5 Innere Mitgliedsklassen und innere anonyme Klassen
Pfeil 9.4.6 Aufrufen der Listener im AWT-Event-Thread
Pfeil 9.4.7 Ereignisse, etwas genauer betrachtet *
Pfeil 9.5 Schaltflächen
Pfeil 9.5.1 Normale Schaltflächen (JButton)
Pfeil 9.5.2 Der aufmerksame ActionListener
Pfeil 9.5.3 Schaltflächen-Ereignisse vom Typ ActionEvent
Pfeil 9.5.4 Basisklasse AbstractButton
Pfeil 9.5.5 Wechselknopf (JToggleButton)
Pfeil 9.6 Textkomponenten
Pfeil 9.6.1 Text in einer Eingabezeile
Pfeil 9.6.2 Die Oberklasse der Text-Komponenten (JTextComponent)
Pfeil 9.6.3 Geschützte Eingaben (JPasswordField)
Pfeil 9.6.4 Validierende Eingabefelder (JFormattedTextField)
Pfeil 9.6.5 Einfache mehrzeilige Textfelder (JTextArea)
Pfeil 9.6.6 Editor-Klasse (JEditorPane) *
Pfeil 9.7 Swing Action *
Pfeil 9.8 JComponent und Component als Basis aller Komponenten
Pfeil 9.8.1 Hinzufügen von Komponenten
Pfeil 9.8.2 Tooltips (Kurzhinweise)
Pfeil 9.8.3 Rahmen (Border) *
Pfeil 9.8.4 Fokus und Navigation *
Pfeil 9.8.5 Ereignisse jeder Komponente *
Pfeil 9.8.6 Die Größe und Position einer Komponente *
Pfeil 9.8.7 Komponenten-Ereignisse *
Pfeil 9.8.8 UI-Delegate – der wahre Zeichner *
Pfeil 9.8.9 Undurchsichtige (opake) Komponente *
Pfeil 9.8.10 Properties und Listener für Änderungen *
Pfeil 9.9 Container
Pfeil 9.9.1 Standardcontainer (JPanel)
Pfeil 9.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
Pfeil 9.9.3 Reiter (JTabbedPane)
Pfeil 9.9.4 Teilungskomponente (JSplitPane)
Pfeil 9.10 Alles Auslegungssache: die Layoutmanager
Pfeil 9.10.1 Übersicht über Layoutmanager
Pfeil 9.10.2 Zuweisen eines Layoutmanagers
Pfeil 9.10.3 Im Fluss mit FlowLayout
Pfeil 9.10.4 BoxLayout
Pfeil 9.10.5 Mit BorderLayout in alle Himmelsrichtungen
Pfeil 9.10.6 Rasteranordnung mit GridLayout
Pfeil 9.10.7 Der GridBagLayoutmanager *
Pfeil 9.10.8 Null-Layout *
Pfeil 9.10.9 Weitere Layoutmanager
Pfeil 9.11 Rollbalken und Schieberegler
Pfeil 9.11.1 Schieberegler (JSlider)
Pfeil 9.11.2 Rollbalken (JScrollBar) *
Pfeil 9.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
Pfeil 9.12.1 Kontrollfelder (JCheckBox)
Pfeil 9.12.2 ItemSelectable, ItemListener und das ItemEvent
Pfeil 9.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
Pfeil 9.13 Fortschritte bei Operationen überwachen *
Pfeil 9.13.1 Fortschrittsbalken (JProgressBar)
Pfeil 9.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
Pfeil 9.14 Menüs und Symbolleisten
Pfeil 9.14.1 Die Menüleisten und die Einträge
Pfeil 9.14.2 Menüeinträge definieren
Pfeil 9.14.3 Einträge durch Action-Objekte beschreiben
Pfeil 9.14.4 Mit der Tastatur: Mnemonics und Shortcut
Pfeil 9.14.5 Der Tastatur-Shortcut (Accelerator)
Pfeil 9.14.6 Tastenkürzel (Mnemonics)
Pfeil 9.14.7 Symbolleisten alias Toolbars
Pfeil 9.14.8 Popup-Menüs
Pfeil 9.14.9 System-Tray nutzen *
Pfeil 9.15 Das Model-View-Controller-Konzept
Pfeil 9.16 Auswahlmenüs, Listen und Spinner
Pfeil 9.16.1 Listen (JList)
Pfeil 9.16.2 Auswahlmenü (JComboBox)
Pfeil 9.16.3 Drehfeld (JSpinner) *
Pfeil 9.16.4 Datumsauswahl *
Pfeil 9.17 Tabellen (JTable)
Pfeil 9.17.1 Ein eigenes Tabellen-Model
Pfeil 9.17.2 Basisklasse für eigene Modelle (AbstractTableModel)
Pfeil 9.17.3 Ein vorgefertigtes Standard-Modell (DefaultTableModel)
Pfeil 9.17.4 Ein eigener Renderer für Tabellen
Pfeil 9.17.5 Zell-Editoren
Pfeil 9.17.6 Größe und Umrandung der Zellen *
Pfeil 9.17.7 Spalteninformationen *
Pfeil 9.17.8 Tabellenkopf von Swing-Tabellen *
Pfeil 9.17.9 Selektionen einer Tabelle *
Pfeil 9.17.10 Automatisches Sortieren und Filtern mit RowSorter *
Pfeil 9.18 Bäume (JTree)
Pfeil 9.18.1 JTree und sein TreeModel und TreeNode
Pfeil 9.18.2 Selektionen bemerken
Pfeil 9.18.3 Das TreeModel von JTree *
Pfeil 9.19 JRootPane und JDesktopPane *
Pfeil 9.19.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
Pfeil 9.19.2 JDesktopPane und die Kinder von JInternalFrame
Pfeil 9.19.3 JLayeredPane
Pfeil 9.20 Dialoge und Window-Objekte
Pfeil 9.20.1 JWindow und JDialog
Pfeil 9.20.2 Modal oder nicht-modal?
Pfeil 9.20.3 Standarddialoge mit JOptionPane
Pfeil 9.20.4 Der Dateiauswahldialog
Pfeil 9.20.5 Der Farbauswahldialog JColorChooser *
Pfeil 9.21 Flexibles Java-Look-and-Feel
Pfeil 9.21.1 Look and Feel global setzen
Pfeil 9.21.2 UIManager
Pfeil 9.21.3 Die Windows-Optik mit JGoodies Looks verbessern *
Pfeil 9.22 Swing-Komponenten neu erstellen oder verändern *
Pfeil 9.22.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer
Pfeil 9.23 Die Zwischenablage (Clipboard)
Pfeil 9.23.1 Clipboard-Objekte
Pfeil 9.23.2 Mit Transferable auf den Inhalt zugreifen
Pfeil 9.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
Pfeil 9.23.4 Einfügungen in der Zwischenablage erkennen
Pfeil 9.23.5 Drag & Drop
Pfeil 9.24 Undo durchführen *
Pfeil 9.25 AWT, Swing und die Threads
Pfeil 9.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
Pfeil 9.25.2 Swing ist nicht thread-sicher
Pfeil 9.25.3 invokeLater() und invokeAndWait()
Pfeil 9.25.4 SwingWorker
Pfeil 9.25.5 Eigene Ereignisse in die Queue setzen *
Pfeil 9.25.6 Auf alle Ereignisse hören *
Pfeil 9.26 Barrierefreiheit mit der Java Accessibility API
Pfeil 9.27 Zeitliches Ausführen mit dem javax.swing.Timer
Pfeil 9.28 Die Zusatzkomponentenbibliothek SwingX
Pfeil 9.28.1 Im Angebot: Erweiterte und neue Swing-Komponenten
Pfeil 9.28.2 Überblick über erweiterte Standard-Swing-Klassen
Pfeil 9.28.3 Neue Swing-Klassen
Pfeil 9.28.4 Weitere SwingX-Klassen
Pfeil 9.28.5 SwingX-Installation
Pfeil 9.29 Alternativen zu programmierten Oberflächen, AWT und Swing *
Pfeil 9.29.1 Deklarative Beschreibungen der Oberfläche: Swing JavaBuilder, Swixml
Pfeil 9.29.2 SWT (Standard Widget Toolkit)
Pfeil 9.30 Zum Weiterlesen

Rheinwerk Computing - Zum Seitenanfang

9.29 Alternativen zu programmierten Oberflächen, AWT und Swing *Zur nächsten Überschrift

Dass Swing-Oberflächen immer programmiert werden müssen, hält auf, auch wenn ein GUI-Builder heutzutage die Schmerzen minimiert. Um in die Richtung von deklarativen Oberflächen zu kommen, gibt es unterschiedliche Open-Source-Lösungen, da Oracle nichts im Angebot hat.

Es gibt Anwendungsfälle, in denen weder AWT noch Swing passen. Swing ist zwar sehr mächtig, doch kostet es auch viele Ressourcen. AWT ist zwar schlank und recht schnell, bietet aber wenige Komponenten. Oracle zeigt auch bisher keine Ambitionen, das AWT weiterzuentwickeln. Das AWT ist bei Geräten mit wenig Speicher, etwa Handheld-Geräten, noch eine interessante Variante, aber es sieht so aus, als ob die Entwicklung bei JavaFX Script weitergeht. JavaFX erlaubt auch deklarative Oberflächen. Während AWT und Swing aufeinander aufbauen, ist JavaFX völlig neu entworfen und komplett unabhängig. Eine weitere Möglichkeit ist SWT, was durch Eclipse bekannt wurde. Es ist interessant, weil mit der Eclipse RCP eine ausgereifte Möglichkeit zur Entwicklung von Desktop-Programmen geschaffen wurde.

Ein ganz anderer Trend zeigt in die Richtung HTML5: Eine Mischung aus HTML mit CSS und JavaScript tut es auch.


Rheinwerk Computing - Zum Seitenanfang

9.29.1 Deklarative Beschreibungen der Oberfläche: Swing JavaBuilder, SwixmlZur nächsten ÜberschriftZur vorigen Überschrift

Eine andere Philosophie ist die Trennung der Beschreibung der Benutzerschnittstelle und der Logik. Zwar ist es ohnehin guter Stil, diese zu trennen, doch einen Schritt weiter geht die völlige Loslösung von der Programmierung in Java für den Aufbau des Komponentenbaums und die Hinwendung zu einer externen Beschreibung von grafischen Oberflächen, etwa in XML oder YAML.

Das andere Ufer

Microsoft erkannte ebenfalls die Notwendigkeit einer deklarativen Beschreibung von Oberflächen und nutzt intensiv XAML (Extensible Application Markup Language). Gleichzeitig gibt es leistungsfähige Tools und Designer für XAML. Die Firma Soyatec versucht sich mit eFace an einer Java-Realisierung (http://www.soyatec.com/eface/).

Swing JavaBuilder

Eine aktuelle Lösung zur deklarativen Beschreibung von Swing-Obeflächen bietet der Swing JavaBuilder (http://code.google.com/p/javabuilders/). Die Open-Source-Bibliothek steht unter der Apache-Lizenz und nutzt statt XML das kompaktere YAML-Format, dessen Schreibweise noch weiter verkürzt wurde. Das PDF-Tutorial gibt ein Beispiel:

JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose):
– JButton(name=save, text=button.save, onAction=[$validate,save,done])
– JButton(name=cancel, text=button.cancel, onAction=[$confirm,cancel])
– MigLayout: |
[pref] [grow,100] [pref] [grow,100]
"label.firstName" txtFirstName "label.lastName" txtLastName
"label.email" txtEmail+*
>save+*=1,cancel=1
bind:
– txtFirstName.text: person.firstName
– txtLastName.text: person.lastName
– txtEmail.text: person.emailAddress
validate:
– txtFirstName.text: {mandatory: true, label: label.firstName}
– txtLastName.text: {mandatory: true, label: label.lastName}
– txtEmail.text: {mandatory: true, emailAddress: true, label: label.email}

Dazu kommt eine Java-Klasse, die die YAML-Datei referenziert und die Ereignisbehandler realisiert, also etwa die save()-Methode anbietet. Jetzt fehlt nur noch ein toller GUI-Builder.

Swixml und XUL

Swixml nutzt das XML-Format zur Beschreibung von GUIs. Eine Swixml-Datei sieht etwa folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<frame size="640,480" title="Hallo Welt" DefaultCloseOperation="JFrame.EXIT_ON_CLOSE">
<panel constraints="BorderLayout.CENTER">
<label LabelFor="tf" text="Hallo Welt!"/>
<textfield id="tf" Columns="20" Text="Swixml"/>
<button Text="Klick mich" Action="submit"/>
</panel>
</frame>

Swixml nutzt SAX und JDOM, um die XML-Datei einzulesen und zu repräsentieren und um zur Laufzeit eine Swing-Anwendung darzustellen. Zugriff auf das Objektgepflecht liefert dann eine Anweisug wie diese:

new SwingEngine( this ).render( "datei.xml" )

Das Ergebnis wäre in unserem Fall in JFrame.

Die Folien unter http://www.swixml.org/slides.html geben einen Einblick in die Möglichkeiten.


Rheinwerk Computing - Zum Seitenanfang

9.29.2 SWT (Standard Widget Toolkit)Zur nächsten ÜberschriftZur vorigen Überschrift

Im Jahr 1998 begann IBM mit der Entwicklung des Nachfolgers von VisualAge for Java (das in Smalltalk geschrieben war). Für die neue Entwicklungsumgebung – aus der später Eclipse wurde – benötigte das Entwicklerteam Oberflächenelemente. Swing war weit davon entfernt, zügig, speichereffizient und korrekt zu sein, und Sun hat schon damals die AWT-Entwicklung nicht erkennbar weitergeführt. So entschied IBM, mit dem SWT (Standard Widget Toolkit) eine Alternative zum AWT zu entwickeln, die Möglichkeiten eines nativen grafischen Systems nutzen kann. Dazu zählen neben Komponenten wie Schaltflächen und Tabellen auch integriertere Fähigkeiten wie Drag & Drop, Zwischenablage, Drucken und ActiveX-Integration (unter Windows). Dabei nutzt SWT keinen Anteil von AWT, nicht einmal die grafischen Primitivoperationen oder Java 2D. Wegen dieser engen Kopplung an das System müssen die SWT-Applikationen mit einer dynamischen Bibliothek (DLL unter Windows) ausgeliefert werden. Eine Umsetzung gibt es heute außer für Windows (auch Windows CE) und Mac OS X etwa auf diversen Motif-Plattformen, GTK (kein Qt) und QNX/Photon. (Wer nur unter GNOME und GTK+ programmiert, der sollte einen Blick auf Java-GNOME unter http://java-gnome.sourceforge.net/ werfen.)

Ursprünglich war das SWT (http://www.eclipse.org/swt/) ausschließlich für die neue Entwicklungsumgebung gedacht. Mittlerweile erfreut sich die Swing-Alternative aber größerer Beliebtheit und ist inzwischen von der Entwicklungsumgebung losgelöst. Insbesondere für mobile Endgeräte (Windows CE) ist das SWT sehr performant, da die Bibliothek auf einem kleinen nativen Kern aufbaut und recht leichtgewichtig ist. Die Eclipse Rich Client Platform (RCP) ist ein großes Framework für komplexe grafische Oberflächen auf der Basis von SWT, das Aufgaben wie Konfigurationen für Benutzer oder Verteilung und Aktualisierung von Haus aus realisiert.

Das immer wieder vorgebrachte Argument, dass mit SWT die Java-Oberflächen genauso aussehen wie native Oberflächen der jeweiligen Plattform, ist fragwürdig. SWT-Oberflächen sehen anders aus, etwa bei den Reitern oder Menüs, und Swing kommt dem nativen Aussehen – insbesondere ab Java Version 6 auf Windows – eigentlich näher. Dem Anwender ist das ziemlich egal. Selbst für konservativere Bereiche wie Office haben sich Anwender daran gewöhnt, dass Microsoft in jeder Produktversion die Optik anpasst und Microsoft Office 2007 nun völlig anders aussehen lässt. Office 12 sieht wieder ganz anders aus als der Windows Media Player, und Letzterer wirkt anders als die MSN Encarta – drei Anwendungen von Microsoft (von den optischen Änderungen der grafischen Oberfläche war noch gar nicht die Rede). Die Avantgarde der Anwender passte schon immer die Oberflächen an; das »Skinning« unterstützen heute bereits viele Anwendungen, egal, ob sie Winamp oder Yahoo! Messenger heißen.

Ob die IBM-Entwickler mit dem mittlerweile schnellen Swing-Framework die gleiche Entscheidung treffen werden, wird immer wieder diskutiert – ebenso wie die Frage, ob Swing irgendwann einmal Eclipse realisiert. Von der Geschwindigkeit und dem Speicherverbrauch her wäre es denkbar, aber sehr unwahrscheinlich, dass die Entwickler Mühe in eine Umstellung investieren. Zumal in SWT auch Swing-Applikationen und Java 2D zum Laufen gebracht werden können.

SwingWT

Normalerweise nutzt Swing zur Darstellung der Komponenten die Grundeigenschaften von AWT: Mit einem Stift in einer Farbe kann auf eine Oberfläche gezeichnet werden. SwingWT (http://swingwt.sourceforge.net/) versucht eine Abbildung der Swing- und AWT-Komponenten und weitere Zeicheneigenschaften auf das SWT, sodass sich etwa Komponentenbibliotheken einfach in Eclipse RCP-Projekte einbinden lassen. Das letzte Update stammt von August 2007.

SWTSwing

Während SwingWT das AWT und Swing auf SWT bringt, nimmt sich ein anderes Projekt genau die andere Richtung vor: SWTSwing (http://swtswing.sourceforge.net/) portiert SWT auf Swing. So wäre es prinzipiell möglich, Eclipse ohne native Bibliotheken unter 100 % purem Java laufen zu lassen. Allerdings ist auch die Entwicklung im August 2007 stehen geblieben. Welch Zufall dass es wie SwingWT ebenfalls im August 2007 endete.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Neuauflage: Java SE 8 Standard-Bibliothek
Neuauflage: Java SE 8 Standard-Bibliothek
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Java EE 7






 Professionell
 entwickeln mit
 Java EE 7


Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Einstieg in Eclipse






 Einstieg in Eclipse


Zum Katalog: Einstieg in Java






 Einstieg in Java


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de