Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort
Download: - ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / Java-Insel | vor >>
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom Programmieren mit der Java Standard Edition Version 6
Java ist auch eine Insel (8. Aufl.) 8., aktual. Auflage, geb., mit DVD 1.475 S., 49,90 Euro Galileo Computing ISBN 978-3-8362-1371-4 |
| 16 Grafische Oberflächen mit Swing
|  | 16.1 Das Abstract Window Toolkit und Swing
|  |  | 16.1.1 SwingSet-Demos
|  |  | 16.1.2 Abstract Window Toolkit (AWT)
|  |  | 16.1.3 Java Foundation Classes
|  |  | 16.1.4 Was Swing von AWT unterscheidet
|  |  | 16.1.5 Die Klasse Toolkit
|  | 16.2 Fenster unter grafischen Oberflächen
|  |  | 16.2.1 Swing-Fenster darstellen
|  |  | 16.2.2 Fenster schließbar machen – setDefaultCloseOperation()
|  |  | 16.2.3 AWT-Fenster darstellen
|  |  | 16.2.4 Sichtbarkeit des Fensters
|  |  | 16.2.5 Größe und Position des Fensters verändern
|  |  | 16.2.6 Unterklassen der Fenster-Klassen bilden
|  |  | 16.2.7 Fenster- und Dialog-Dekoration, Transparenz
|  |  | 16.2.8 Dynamisches Layout während einer Größenänderung
|  | 16.3 Beschriftungen (JLabel)
|  |  | 16.3.1 Mehrzeiliger Text, HTML in der Darstellung
|  | 16.4 Icon und ImageIcon für Bilder auf Swing-Komponenten
|  | 16.5 Es tut sich was – Ereignisse beim AWT
|  |  | 16.5.1 Die Klasse AWTEvent
|  |  | 16.5.2 Events auf verschiedenen Ebenen
|  |  | 16.5.3 Swings Ereignisquellen und Horcher (Listener)
|  |  | 16.5.4 Listener implementieren
|  |  | 16.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden
|  |  | 16.5.6 Aufrufen der Listener im AWT-Event-Thread
|  |  | 16.5.7 Adapterklassen nutzen
|  |  | 16.5.8 Innere Mitgliedsklassen und innere anonyme Klassen
|  | 16.6 Schaltflächen
|  |  | 16.6.1 Normale Schaltflächen (JButton)
|  |  | 16.6.2 Der aufmerksame ActionListener
|  |  | 16.6.3 Basisklasse AbstractButton
|  |  | 16.6.4 Wechselknopf (JToggleButton)
|  | 16.7 Swing Action
|  | 16.8 JComponent und Component als Basis aller Komponenten
|  |  | 16.8.1 Tooltips
|  |  | 16.8.2 Rahmen (Border)
|  |  | 16.8.3 Fokus und Navigation
|  |  | 16.8.4 Ereignisse jeder Komponente
|  |  | 16.8.5 Die Größe und Position einer Komponente
|  |  | 16.8.6 Komponenten-Ereignisse
|  |  | 16.8.7 Hinzufügen von Komponenten
|  |  | 16.8.8 UI-Delegate – der wahre Zeichner
|  |  | 16.8.9 Undurchsichtige (opake) Komponente
|  |  | 16.8.10 Properties und Listener für Änderungen
|  | 16.9 Container
|  |  | 16.9.1 Standardcontainer (JPanel)
|  |  | 16.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
|  |  | 16.9.3 Reiter (JTabbedPane)
|  |  | 16.9.4 Teilungs-Komponente (JSplitPane)
|  | 16.10 Alles Auslegungssache: die Layoutmanager
|  |  | 16.10.1 Übersicht über Layoutmanager
|  |  | 16.10.2 Zuweisen eines Layoutmanagers
|  |  | 16.10.3 Im Fluss mit FlowLayout
|  |  | 16.10.4 Mit BorderLayout in allen Himmelsrichtungen
|  |  | 16.10.5 Rasteranordnung mit GridLayout
|  |  | 16.10.6 Der GridBagLayout-Manager
|  |  | 16.10.7 Null-Layout
|  |  | 16.10.8 BoxLayout
|  |  | 16.10.9 Weitere Layoutmanager
|  | 16.11 Rollbalken und Schieberegler
|  |  | 16.11.1 Schieberegler (JSlider)
|  |  | 16.11.2 Rollbalken (JScrollBar)
|  | 16.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
|  |  | 16.12.1 Kontrollfelder (JCheckBox)
|  |  | 16.12.2 ItemSelectable, ItemListener und das ItemEvent
|  |  | 16.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
|  | 16.13 Fortschritte bei Operationen überwachen
|  |  | 16.13.1 Fortschrittsbalken (JProgressBar)
|  |  | 16.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
|  | 16.14 Menüs und Symbolleisten
|  |  | 16.14.1 Die Menüleisten und die Einträge
|  |  | 16.14.2 Menüeinträge definieren
|  |  | 16.14.3 Einträge durch Action-Objekte beschreiben
|  |  | 16.14.4 Mit der Tastatur: Mnemonics und Shortcut
|  |  | 16.14.5 Der Tastatur-Shortcut (Accelerator)
|  |  | 16.14.6 Tastenkürzel (Mnemonics)
|  |  | 16.14.7 Symbolleisten alias Toolbars
|  |  | 16.14.8 Popup-Menüs
|  |  | 16.14.9 System-Tray nutzen
|  | 16.15 Das Model-View-Controller-Konzept
|  | 16.16 Auswahlmenüs, Listen und Spinner
|  |  | 16.16.1 Auswahlmenü (JComboBox)
|  |  | 16.16.2 Zuordnung einer Taste mit einem Eintrag
|  |  | 16.16.3 Datumsauswahl
|  |  | 16.16.4 Listen (JList)
|  |  | 16.16.5 Drehfeld (JSpinner)
|  | 16.17 Texteingabefelder
|  |  | 16.17.1 Text in einer Eingabezeile
|  |  | 16.17.2 Die Oberklasse der Text-Komponenten (JTextComponent)
|  |  | 16.17.3 Geschützte Eingaben (JPasswordField)
|  |  | 16.17.4 Validierende Eingabefelder (JFormattedTextField)
|  |  | 16.17.5 Einfache mehrzeilige Textfelder (JTextArea)
|  |  | 16.17.6 Editor-Klasse (JEditorPane)
|  | 16.18 Tabellen (JTable)
|  |  | 16.18.1 Ein eigenes Tabellen-Model
|  |  | 16.18.2 Basisklasse für eigene Modelle (AbstractTableModel)
|  |  | 16.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel)
|  |  | 16.18.4 Ein eigener Renderer für Tabellen
|  |  | 16.18.5 Zell-Editoren
|  |  | 16.18.6 Größe und Umrandung der Zellen
|  |  | 16.18.7 Spalteninformationen
|  |  | 16.18.8 Tabellenkopf von Swing-Tabellen
|  |  | 16.18.9 Selektionen einer Tabelle
|  |  | 16.18.10 Automatisches Sortieren und Filtern mit RowSorter
|  | 16.19 Bäume (JTree)
|  |  | 16.19.1 JTree und sein TreeModel und TreeNode
|  |  | 16.19.2 Selektionen bemerken
|  |  | 16.19.3 Das TreeModel von JTree
|  | 16.20 JRootPane und JDesktopPane
|  |  | 16.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
|  |  | 16.20.2 JDesktopPane und die Kinder JInternalFrame
|  | 16.21 Dialoge und Window-Objekte
|  |  | 16.21.1 JWindow und JDialog
|  |  | 16.21.2 Modal oder nicht-modal
|  |  | 16.21.3 Standarddialoge mit JOptionPane
|  |  | 16.21.4 Der Dateiauswahldialog
|  | 16.22 Flexibles Java-Look-and-Feel
|  |  | 16.22.1 Look and Feel global setzen
|  |  | 16.22.2 UIManager
|  |  | 16.22.3 Windowsoptik mit JGoodies Looks verbessern
|  | 16.23 Die Zwischenablage (Clipboard)
|  |  | 16.23.1 Clipboard-Objekte
|  |  | 16.23.2 Auf den Inhalt zugreifen mit Transferable
|  |  | 16.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
|  |  | 16.23.4 Einfügungen in der Zwischenablage erkennen
|  |  | 16.23.5 Drag
|  | 16.24 Undo durchführen
|  | 16.25 AWT, Swing und die Threads
|  |  | 16.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
|  |  | 16.25.2 Swing ist nicht Thread-sicher
|  |  | 16.25.3 invokeLater() und invokeAndWait()
|  |  | 16.25.4 SwingWorker
|  |  | 16.25.5 Eigene Ereignisse in die Queue setzen
|  |  | 16.25.6 Auf alle Ereignisse hören
|  | 16.26 Barrierefreiheit mit der Java Accessibility API
|  | 16.27 Zeitliches Ausführen mit dem javax.swing.Timer
|  | 16.28 Alternativen zu AWT und Swing
|  |  | 16.28.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
|  |  | 16.28.2 SWT (Standard Widget Toolkit)
|  | 16.29 Zum Weiterlesen
## 16.22 Flexibles Java-Look-and-Feel Das Aussehen und Verhalten der Komponenten, in Java Look and Feel (LAF) genannt, lässt sich frei bestimmen und erzeugt so bei jedem Benutzer auf seiner Architektur die Illusion, es wäre eine plattformabhängige Applikation. Das Programm gliedert sich hinsichtlich des Aussehens in die anderen Programme ein und fällt nicht als Fremdling auf. Standardmäßig begegnet uns das Look and Feel mit dem Namen Ocean (früher war es Metal). In Java 6 Update 10 gibt es ein neues LAF mit dem Namen Nimbus, welches aber dennoch nicht das Standard-LAF ist, sondern dies ist weiterhin Ocean. Um das Aussehen von Java-Applikationen zu ändern, gibt es eine Reihe von Möglichkeiten: Beim Programmstart einen Schalter setzen. Eine Konfigurationsdatei in das lib-Verzeichnis setzen. Im Java-Programm von Hand das LAF verändern. ### 16.22.1 Look and Feel global setzen Um für alle Java-Programme zentral ein LAF zu setzen, wird in das C:\Programme\Java\ jdk1.6.0\jre\lib-Verzeichnis eine kleine Datei swing.properties gesetzt: Listing 16.67 swing.properties
    swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Der Schalter swing.defaultlaf bestimmt die Klasse für das LAF; in unserem Fall Windows. Automatisch nehmen alle gestarteten Java-Programme dieses Standard-LAF an – es sei denn, sie setzen es wieder im Programm um. Das zeigen die folgenden Abschnitte. ### 16.22.2 UIManager Um das LAF von Applikationen zur Laufzeit zu ändern, müssen wir nur die statische Funktion setLookAndFeel() der Klasse UIManager aufrufen. Die Klasse kümmerst sich im das Aussehen der Java-Programme und bietet verschiedene Funktionen, mit denen wir die Klassennamen vom Java-eigenen LAF und vom System-LAF erfragen können. Der Klassenname ist wichtig, denn er muss setLookAndFeel() als Argument übergeben werden. Da Benutzer von Java-Programmen im Allgemeinen eine Oberfläche erwarten, die genauso aussieht wie der Rest, sollten wir das Java-LAF in das System-LAF umschalten.
Beispiel Der folgende Programmblock setzt mit setLookAndFeel() das Aussehen einer Oberfläche, wie es das System vorgibt. Die Programme sollten dann wie native Programme aussehen. Listing 16.68 com/tutego/insel/ui/swing/SetLookAndFeel.java, Ausschnit
    try {
      UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
    } catch( Exception e ) { e.printStackTrace(); }
Einige spezielle LAF sind nicht auf jeder Architektur erlaubt. So verbietet Apple sein eigenes LAF auf Plattformen anderer Hersteller. [Apple betrachtete die Windows-Version 2.1 als Look-and-Feel-Clone und verklagte Microsoft ab 1988 wegen Urheberrechtsverletzungen auf eine Summe von über fünf Milliarden US-Dollar. Letztendlich bekam Apple aber nichts; das Verfahren wurde 1997 eingestellt. 1989 klagte Xerox gegen Apple und beanspruchte das Urheberrecht an grafischen Oberflächen für sich.] Dennoch lässt sich das Aqua-LAF installieren, in den Pfad integrieren und dann als com.apple.mrj.swing.MacLookAndFeel einbinden. Weitere Infos dazu bietet die Webseite http://www.ing.unitn.it/~luttero/javaonMac/. Das neue Nimbus-LAF von Java 6u10 wird gesetzt über
    UIManager.setLookAndFeel( "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" );
    public class javax.swing.UIManager
    implements Serializable
static LookAndFeel getLookAndFeel() Gibt das aktuelle LAF zurück. static String getSystemLookAndFeelClassName() Gibt das LAF des aktuellen Fenstersystems zurück. static String getCrossPlatformLookAndFeelClassName() Liefert den Namen der Klassen für das systemunabhängige LAF. static void setLookAndFeel( String className ) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException Setzt ein neues LAF. #### Ändern des Aussehens zur Laufzeit Das Setzen eines LAFs mit setLookAndFeel() führt zu keinem Neuzeichnen der Komponenten. Wird das neue LAF gesetzt, bevor Swing die Komponenten darstellen muss, fällt das nicht auf. Mit dargestellten Komponenten müssen wir jedoch das Neuzeichnen anstoßen. Dazu dient die Funktion:
    SwingUtilities.updateComponentTreeUI( component );
Die component wird im Allgemeinen das Window (also JFrame/JWindow) sein. ### 16.22.3 Windowsoptik mit JGoodies Looks verbessern Zwar bemühte sich Sun bis Java 6 bestmöglich, das Windows-XP-Look-and-Feel zu emulieren, doch das gelingt nicht an allen Stellen. Seit Java 6 nutzt das System den nativen Windows-Renderer, sodass Unstimmigkeiten eigentlich ausgeschlossen sein sollten. Verbesserungen lassen sich auch nicht so einfach publizieren, da Sun an Release-Zyklen gebunden ist. In diesem Fall hilft JGoodies Looks (https://looks.dev.java.net/), ein LAF unter der BSD-Lizenz. Das Ziel von Looks ist die perfekte Nachbildung des Aussehens für die Windows-Reihen 95/98/NT/ME/2000/2003/XP/Vista ab Java 1.4. Gegenüber dem Windows-Look-and-Feel von Sun korrigiert es viele Feinheiten, wie passende Insets bei Eingabefeldern, Icons, Farben, Rahmen, den richtigen Font, Menüeigenschaften, Auflösungen von 96 und 120 dpi und vieles mehr. Gesetzt wird Looks wie jedes andere LAF:
    try {
    String laf =
        LookUtils.IS_OS_WINDOWS_XP
            ? Options.getCrossPlatformLookAndFeelClassName()
            : Options.getSystemLookAndFeelClassName();
        UIManager.setLookAndFeel( laf );
    } catch ( Exception e ) {
        System.err.println( "Can't set look & feel:" + e );
    }
### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Java ist auch eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Tipp
| Coding for Fun
Buchempfehlungen
| Objektorientierte Programmierung
| Einstieg in Eclipse 3.4
| Java 6 lernen mit Eclipse
| NetBeans Platform 6
| Java und XML
| Visual C# 2008
| IT-Handbuch für Fachinformatiker
| C++ von A bis Z
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> 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.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de