GUIs mit Swing Markus Reschke 28.08.2014
Beispiel: Ein einfaches GUI-Programm Siehe Painter.java Markus Reschke GUIs mit Swing 2
GUI Frameworks in Java AWT war das erste GUI-Framework, welches mit Java geliefert wurde. Es benutzt die nativen GUI-Elemente (Peer-Konzept). Es wird nicht mehr weiterentwickelt. (Pakete java.awt und java.awt.event) Swing ist der Nachfolger von AWT und baut auf einigen Klassen davon auf. Swing ist komplett platformunabhängig und zeichnet alle GUI-Elemente selber. (Paket javax.swing) Markus Reschke GUIs mit Swing 3
Ein paar wichtige AWT-Klassen Component repräsentiert allgemein Bestandteile einer GUI Container kann andere GUI-Komponenten beinhalten LayoutManager ordnet Komponenten in Containern an Window repräsentiert ein Fenster ohne Rahmen und Titel Frame repräsentiert ein Fenster mit Rahmen und Titel, Unterklasse von Window Markus Reschke GUIs mit Swing 4
JPanel Ein Container für Swing-Komponenten (abgeleitet von JComponent, welches von Component abgeleitet ist) Kann ein LayoutManager zugewiesen bekommen (setlayout(layoutmanager m)) Kann Komponenten aufnehmen (Hinzufügen mit add(component c) oder add(component c, Object constraints)) Hintergrundfarbe setzen mit setbackground(color c) Markus Reschke GUIs mit Swing 5
JFrame Ein Swing-Fenster, abgeleitet von Frame Besitzt ein JPanel, dass die GUI-Komponenten beinhalten soll (Content Pane) Content Pane mit Container getcontentpane() holbar. Kann auf Schließen des Fensters reagieren Reaktion setzen mit void setdefaultcloseoperation(int operation) Möglichkeiten: JFrame.DISPOSE_ON_CLOSE, JFrame.EXIT_ON_CLOSE,JFrame.HIDE_ON_CLOSE (Default) Un/Sichtbar mache mit setvisible(boolean visible) dispose() gibt Fenster frei Markus Reschke GUIs mit Swing 6
Layout Manager Layout Manager kümmern sich um die Anordnung von Komponenten in einem Container Automatische Anordnung von Elementen unabhängig ihrer genauen Größe und Position Einfacheres Vergrößern/Verkleinern des Fensters Verschiedene Look&Feels machen keine Probleme Markus Reschke GUIs mit Swing 7
BorderLayout Fünf Bereiche: BorderLayout.SOUTH,BorderLayout.NORTH,BorderLayout.EAST,BorderLayout.WEST, BorderLayout.CENTER Komponenten werden einem dieser Bereiche beim Hinzufügen zugeordnet Eine Komponente pro Bereich Angabe beim Hinzufügen zu Container add(component c, int borderconstant) Markus Reschke GUIs mit Swing 8
Border Layout Siehe Border.java Markus Reschke GUIs mit Swing 9
FlowLayout Setzt alle Komponenten horizontal hintereinander Fügt bei Bedarf Zeilenumbrüche ein Markus Reschke GUIs mit Swing 10
Flow Layout Siehe Flow.java Markus Reschke GUIs mit Swing 11
Color Klasse von AWT Nutzt u.a. RGB Definition von Farben durch Rot-, Grün und Blauanteil Jeweils von 0 bis 255 Definiert häufig genutzte Farben als Konstanten Markus Reschke GUIs mit Swing 12
Beispiel: Color Siehe ColorEx.java Markus Reschke GUIs mit Swing 13
paintcomponent() und Primitiven paintcomponent(graphics g) zeichnet Komponente Wird von Swing automatisch beim Neuzeichnen der Komponente aufgerufen g ist der Grafik-Kontext (Welche Komponente, welcher Bereich etc.) Kontext kann benutzt werden um grafische Primitiven zu zeichnen Kreise, Linien etc. Markus Reschke GUIs mit Swing 14
Beispiel: Paint Siehe Paint.java Markus Reschke GUIs mit Swing 15
Events Ereignisse werden erzeugt durch Interaktionen mit der GUI Mausbewegung, Klick, Tastendruck etc. Widgets registrieren Ereignis und generieren Eventobjekt dafür Listener warten auf Benachrichtigung durch Widget Publisher-Subscriber-Pattern Wichtige Listener-Interfaces: ActionListener, MouseListener, KeyListener, MouseMotionListener Markus Reschke GUIs mit Swing 16
ActionListener Interface für Listener, die auf ein allgemeines Ereignis eines Widgets warten Details kommen auf das Widget an Für JButton: Auslösen des Buttons Für JTextField: Enter Methode public void actionperformed(actionevent actionevent) behandelt das Event Registrieren mit addactionlistener(actionlistener a) auf das Widget Markus Reschke GUIs mit Swing 17
Adapterklassen Klassen, die Listener-Interfaces implementieren abstrakt leere Methodenrümpfe Sind vorteilhaft, wenn nicht alle Methoden eines Listener-Interfaces geändert werden müssen Nachteil: Vererbung Beispiel: WindowAdapter, MouseAdapter Markus Reschke GUIs mit Swing 18
Dialoge mit JOptionPane Klasse zum Erstellen von modalen Nachrichtendialogen Dialoge können auch Eingaben annehmen Verschiedene Typen: Fehler, Warnung, etc. Markus Reschke GUIs mit Swing 19
Beispiel: JOptionPane Siehe ErrorPane.java Markus Reschke GUIs mit Swing 20
Widgets Fensterelemente z.b. JButton JTextArea JTextField JLabel JList und mehr... Markus Reschke GUIs mit Swing 21
Beispiel: Widgets Siehe Widgets.java Markus Reschke GUIs mit Swing 22
Beispiel: Painter Siehe Painter.java Markus Reschke GUIs mit Swing 23