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

    // Button 1

    final Icon icon1 = new ImageIcon(
            JButtonDemo.class.getResource( "/images/user-trash-full.png" ) );
    final Icon icon2 = new ImageIcon(
            JButtonDemo.class.getResource( "/images/user-trash.png" ) );

    final JButton button1 = new JButton( icon1 );
    frame.add( button1 );

    ActionListener al = new ActionListener() {
      @Override public void actionPerformed( ActionEvent e ) {
        button1.setIcon( icon2 );
      }
    };

    button1.addActionListener( al );

    // Button 2

    final JButton button2 = new JButton( "Ende" );
    frame.add( button2 );

    button2.addActionListener( new ActionListener() {
      @Override public void actionPerformed( ActionEvent e ) {
        System.exit( 0 );
      }
    } );

    frame.pack();
    frame.setVisible( true );
#### Die JButton-API Es gibt mehrere Konstruktoren für JButton-Objekte. Die parameterlose Variante erzeugt eine Schaltfläche ohne Text. Der Text lässt sich mit setText() nachträglich ändern. In der Regel nutzen wir den Konstruktor, dem ein String mitgegeben wird.
    class javax.swing.JButton
    extends AbstractButton
    implements Accessible
JButton() Erzeugt eine neue Schaltfläche ohne Aufschrift. JButton(String text) Erzeugt eine neue Schaltfläche mit Aufschrift. JButton(Icon icon) Erzeugt eine neue Schaltfläche mit Icon. JButton(String text, Icon icon) Erzeugt eine neue Schaltfläche mit Aufschrift und Icon. void setText(String text) Ändert die Aufschrift der Schaltfläche auch im laufenden Betrieb.[67](Vergleichen wir das mit den Methoden der Klasse java.awt.Label. Hier heißen die Methoden zum Lesen und Ändern des Textes setLabel() und getLabel(). Dies ist für mich wieder eines der AWT-Rätsel. Warum heißt es bei einem java.awt.Label-Objekt setText()/getText() und bei einem java.awt.Button-Objekt setLabel()/getLabel()? Immerhin heißt es bei den Swing-Komponenten JLabel und JButton konsequent setText()/getText().) String getText() Liefert die Aufschrift der Schaltfläche. void addActionListener(ActionListener l) Fügt dem Button einen ActionListener hinzu, der die Ereignisse abgreift, die durch die Schaltfläche ausgelöst werden. void removeActionListener(ActionListener l) Entfernt den ActionListener wieder. Somit kann er keine weiteren Ereignisse mehr abgreifen.
Hinweis
Wörter mit einer starken emotionalen Bindung sollten vermieden werden. In englischen Programmen müssen Wörter wie »kill« oder »abort« umgangen werden.[68](Siehe dazu das Buch »Tog on Interface« von Bruce Tognazzini, auszugsweise unter http://www.asktog.com/TOI/toi06KeyboardVMouse1.html.) ]
### 9.5.2 Der aufmerksame ActionListener Klicken wir auf die Schaltfläche, so sollte die Aktion gemeldet werden. Diese wird in Form eines ActionEvent-Objekts an den Zuhörer (einen ActionListener) gesendet. Ein ActionListener wird mit der Methode addActionListener() an die Objekte angeheftet, die Aktionen auslösen können. ActionListener ist eine Schnittstelle mit der Methode actionPerformed(). Die Schnittstelle ActionListener wiederum erweitert die Schnittstelle EventListener, die von allen Listener-Interfaces implementiert werden muss.
    interface java.awt.event.ActionListener
    extends EventListener
void actionPerformed(ActionEvent e) Wird aufgerufen, wenn eine Aktion ausgelöst wird. Abbildung 9.9: Die Beziehung zwischen ActionListener und ActionEvent Werfen wir noch einmal einen Blick auf die Implementierung unserer beiden ActionListener-Klassen, die als anonyme innere Klasse realisiert sind:
    ActionListener al = new ActionListener() {
      public void actionPerformed( ActionEvent e ) {
        button1.setIcon( icon2 );
      }
    };

    button2.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e ) {
        System.exit( 0 );
      }
    } );
### 9.5.3 Schaltflächen-Ereignisse vom Typ ActionEvent Wird ein ActionEvent ausgelöst, dann wird die Methode actionPerformed() aufgerufen. Wir sehen, dass als Argument ein ActionEvent übergeben wird.
    class java.awt.event.ActionEvent
    extends AWTEvent
int getModifiers() Liefert den Umschaltcode für Tasten, die während des Ereignisses gedrückt waren, als Verknüpfung der Konstanten SHIFT_MASK, CTRL_MASK, META_MASK (etwa die -, - oder -Taste) und ALT_MASK. Diese Konstanten kommen direkt aus der Event-Klasse, so ist etwa ALT_MASK = Event.ALT_MASK. Außerdem gibt es die Konstanten ACTION_FIRST, ACTION_LAST und ACTION_PERFORMED, die aber alle für den gleichen Wert stehen. long getWhen() Liefert einen Zeitstempel, wann das Ereignis ausgelöst wurde. String paramString() Liefert einen Erkennungsstring für das Ereignis. ### 9.5.4 Basisklasse AbstractButton Alle Schaltflächen haben in Java eine gemeinsame Oberklasse, die Eigenschaften wie Listener, Abstand Text/Icon und Weiteres bestimmt. Diese Oberklasse ist AbstractButton und ist Basis von: JButton JToggleButton JMenuItem (somit auch für die weiteren Unterklassen JCheckBox und JRadioButton) Der AbstractButton ist, wie der Name schon sagt, eine abstrakte Klasse, die aus JComponent hervorgeht. Über die Oberklasse lassen sich die folgenden Eigenschaften für alle Schaltflächen steuern: Das Mnemonik-Zeichen – ein Kürzel, das im Text unterstrichen dargestellt wird und schnell über die -Taste aufgerufen werden kann. Dies übernimmt die Methode setMnemonic(char). Sich selbst auslösen durch doClick(). Icons mit setDisabledIcon(Icon), setDisabledSelectedIcon(Icon), setPressedIcon(Icon), setRolloverIcon(Icon), setRolloverSelectedIcon(Icon) und setSelectedIcon(Icon) ändern. Die Ausrichtung von Text und Icon in der Schaltfläche durch setVerticalAlignment() und setHorizontalAlignment() bestimmen. Die Position von Icon und Text untereinander durch setVerticalTextPosition() und setHorizontalTextPosition() bestimmen. #### Bilder auf Schaltflächen je nach Zustand * Die Integration mit den Icon-Objekten liegt in der AbstractButton-Klasse. Geben wir im Konstruktor das Icon nicht an, so lässt sich dies immer noch über setIcon() nachträglich setzen und ändern. Wenn die Schaltfläche angeklickt wird, kann ein anderes Bild erscheinen. Dieses Icon setzt setPressedIcon(). Bewegen wir uns über die Schaltfläche, lässt sich auch ein anderes Icon setzen. Dazu dient die Methode setRolloverIcon(). Die Fähigkeit muss aber erst mit setRolloverEnabled(true) eingeschaltet werden. Beide Eigenschaften lassen sich auch zu einem Icon kombinieren, das erscheint, wenn die Maus über dem Bild ist und eine Selektion gemacht wird. Dazu dient setRolloverSelectedIcon(). Für JToggleButton-Objekte ist eine weitere Methode wichtig, denn ein JToggleButton hat zwei Zustände: einen selektierten und einen nicht selektierten. Auch hier können zwei Icon-Objekte zugeordnet werden, und das Icon der Selektion lässt sich mit setSelectedIcon() setzen. Ist die Schaltfläche ausgegraut, ist auch hier ein gesondertes Icon möglich. Es wird mit setDisabledIcon() gesetzt. Dazu passt setDisabledSelectedIcon(). Abbildung 9.10: Die Klasse AbstractButton und ihre Unterklassen #### Den Erkennungsstring (Action-Command) einer Schaltfläche ändern * Manche Ereignisbehandler für Schaltflächen sind einander so ähnlich, dass Entwickler nur einen Listener mit mehreren Schaltflächen verbinden möchten. Dann taucht nur das Problem auf, wie der Listener die Schaltflächen unterscheiden soll. Eine Idee wäre, die Beschriftung mit getText() auszulesen – was allerdings ein Problem mit sich bringt, wenn die Software stark landessprachlich ist, da sich bei mehrsprachigen Anwendungen die Aufschrift ändert. Eine andere Lösung bestünde darin, mit getSource() zu arbeiten. Dann müsste im Listener allerdings die Komponente für einen Vergleich verfügbar sein (was oft nicht der Fall ist). Als Lösung bietet die AbstractButton-Klasse die Methode setActionCommand() an, mit der sich eine Kennung, der sogenannte Action-Command, setzen lässt.
    abstract class javax.swing.AbstractButton
    extends JComponent
    implements ItemSelectable, SwingConstants
void setActionCommand(String command) Setzt einen neuen Kommandostring, wenn das Ereignis ausgeführt wird. Der Listener kann diesen Action-Command mit getActionCommand() aus dem ActionEvent auslesen.
    class java.awt.event.ActionEvent
    extends AWTEvent
String getActionCommand() Liefert den String, der mit dieser Aktion verbunden ist. Ohne explizites Setzen ist der Action-Command standardmäßig mit der Beschriftung der Schaltfläche initialisiert. ### 9.5.5 Wechselknopf (JToggleButton) Ein JToggleButton (zu Deutsch Wechselknopf) hat im Gegensatz zum JButton zwei Zustände. Dies ist vergleichbar mit einem Schalter, der den Zustand »ein« oder »aus« annimmt. Der JButton gerät in diesen Zustand nur bei der Aktivierung, springt dann aber wieder in seinen ursprünglichen Zustand zurück. Der JToggleButton springt bei der ersten Aktivierung in einen festen Zustand und bleibt dort so lange, bis er wieder aktiviert wird. JToggleButton ist die Oberklasse für die Auswahlknöpfe JCheckBox und JRadioButton. ### 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 7 – Mehr als eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| Java und XML
| Einstieg in Eclipse 3.7
| Android 3
| NetBeans Platform 7
| Java ist auch eine Insel
| Apps entwickeln für Android 4
| Java 7
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 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.

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