Seminarunterlage Version: 5.03 Version 5.03 vom 13. Februar 2014
Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Firmen und beziehen sich auf Eintragungen in den USA oder USA-Warenzeichen. Weitere Logos und Produkt- oder Handelsnamen sind eingetragene Warenzeichen oder Warenzeichen der jeweiligen Unternehmen. Kein Teil dieser Dokumentation darf ohne vorherige schriftliche Genehmigung der weitergegeben oder benutzt werden. Die besitzt folgende Geschäftsstellen Adressen der Westernmauer 12-16 D-33098 Paderborn Tel.: (+49) 0 52 51 / 10 63-0 An der alten Ziegelei 5 D-48157 Münster Tel.: (+49) 02 51 / 9 24 35 00 Marlene-Dietrich-Str. 5 D-89231 Neu-Ulm Tel.: (+49) 07 31 / 9 85 88 550 Kreuzberger Ring 13 D-65205 Wiesbaden Tel.: (+49) 06 11 / 7 78 40 00 Wikingerstraße 18-20 D-51107 Köln Tel.: (+49) 02 21 / 8 70 61 0 Internet: http://www.ordix.de Email: training@ordix.de Seite 2 Version: 5.03
Inhaltsverzeichnis 1 Entstehung von Swing und Unterschiede zum Awt... 7 1.1 Historie der Grafikbibliotheken in Java... 8 1.2 Awt - Paket java.awt... 9 1.3 Swing - Paket javax.swing... 10 1.4 Unterschiede zwischen Swing und Awt... 11 2 Grundlegende Swing-Container und Komponenten... 12 2.1 Container und Komponenten... 13 2.2 Beispiel für Container mit Komponenten... 14 2.3 Unterteilung der Container... 15 2.4 Das contentpane... 16 2.5 Die Klasse JFrame... 17 2.6 JFrame()-Konstruktoren... 18 2.7 settitle()-methode... 19 2.8 Fenster anzeigen... 20 2.9 pack()- und setsize()-methoden... 21 2.10 setvisible()-methode... 23 2.11 setdefaultcloseoperation()-methode... 24 2.12 Window-EventWindow-Event... 25 2.13 Anwendung schließen... 26 2.14 processwindowevent()-methode... 27 2.15 Ein einfaches Fenster... 28 2.16 Die Klasse JDialog... 29 2.17 JDialog()-Konstruktoren... 30 2.18 Ein einfacher Dialog... 32 2.19 Die Klasse JPanel... 33 2.20 JPanel()-Konstruktoren... 34 2.21 JPanel hinzufügen... 35 2.22 Komponenten hinzufügen... 36 2.23 Atomare Komponenten... 37 2.24 Ein grafischer Überblick... 39 2.25 Die Klasse JLabel... 40 2.26 JLabel()-Konstruktoren... 41 2.27 Inhalt eines JLabel ändern / abfragen... 43 2.28 Aussehen eines JLabel ändern / abfragen... 44 2.29 Swing-Konstanten zur Beschreibung der Ausrichtung... 45 2.30 Die Klasse JTextField... 46 2.31 JTextField()-Konstruktoren... 47 2.32 Inhalt eines JTextField ändern / abfragen... 48 2.33 Einige Methoden eines JTextField... 49 2.34 Schaltflächen... 50 2.35 Methoden von JComponent/ AbstractButton... 51 2.36 Methoden der Klasse AbstractButton... 52 2.37 Beispiel zu den Methoden... 54 2.38 Die Klasse JButton()und ihre Konstruktoren... 56 2.39 Einige nützliche Methoden der Klasse JButton()... 57 2.40 Die Klassen JRadioButton() und JCheckBox()... 58 2.41 JRadioButton() und JCheckBox()-Konstruktoren... 59 2.42 Die Klasse ButtonGroup()... 61 2.43 Die Klasse JComboBox()... 62 2.44 JComboBox()-Konstruktoren... 63 2.45 Methoden der Klasse JComboBox... 64 2.46 Beispiel für eine JComboBox... 68 3 Der Layout Manager... 69 Version: 5.03 Seite 3
3.1 Der Layout-Manager... 70 3.2 Vor und Nachteile von Layout-Managern... 71 3.3 Layout-Manager zuweisen und abfragen... 72 3.4 Das BorderLayout... 73 3.4.1 Horizontaler und Vertikaler Abstand... 74 3.4.2 Grafik zum BorderLayout... 75 3.4.3 Beispiel zum BorderLayout... 76 3.5 Das FlowLayout... 77 3.5.1 Ausrichtung im FlowLayout... 78 3.5.2 Grafiken zum FlowLayout... 79 3.5.3 Beispiel zum FlowLayout... 80 3.6 Das GridLayout... 81 3.6.1 Spalten- und Zeilenanzahl... 83 3.6.2 Grafiken zum GridLayout... 84 3.6.3 Beispiel zum GridLayout... 85 4 Event Handling - Es tut sich was...... 86 4.1 Einfaches Fenster mit Swing ohne Event Handling... 87 4.2 Fenster schließen... 88 4.3 Event-Modell... 89 4.4 Events, Listener und Methoden... 91 4.5 Registrieren als Event-Listener... 93 4.6 Interfaces... 94 4.7 Beispiel Fenster schließen mit einem Interface... 95 4.8 Adapterklassen... 98 4.9 Beispiel Fenster schließen mit normaler Adapterklasse... 99 4.10 Beispiel Fenster schließen mit lokaler Adapterklasse... 101 4.11 Beispiel Fenster schließen mit anonymer Adapterklasse... 102 4.12 Implementierung mehrerer Event-Listener... 103 4.13 Event-Listener für zwei Buttons - erste Variante... 104 4.14 Event-Listener für zwei Buttons - zweite Variante... 105 4.15 Threads und Swing-Komponenten... 106 4.16 Klasse SwingUtilities... 107 4.17 Beispiel invokeandwait(runnable dorun)... 108 4.18 Klasse SwingWorker... 111 4.19 Zusammenfassung... 116 5 Das Model-View-Controller Entwurfsmuster... 117 5.1 Was ist das Model-View-Controller Entwurfsmuster?... 118 5.2 Swing Komponenten-Architektur und MVC... 121 5.2.1 JComponent... 122 5.2.2 View-Controller-Klassen... 123 5.2.3 Anwendungsbeispiele... 128 5.2.4 Beobachter und Beobachtete... 133 5.2.5 Austauschbares Look&Feel... 138 6 Komplexe Swing-Container... 139 6.1 Überblick... 140 6.2 Die Klasse JSplitPane()... 141 6.3 Positionierung in einer JSplitPane()... 142 6.4 Einige nützliche Methoden zur JSplitPane... 144 6.5 Grafik zur JSplitPane()... 145 6.6 Beispiel zur JSplitPane()... 146 6.7 Die Klasse JTabbedPane()... 147 6.7.1 Hinzufügen neuer Karteikarten... 148 6.7.2 Weitere Methoden zur JTabbedPane()... 150 6.7.3 Grafik zur JTabbedPane()... 152 6.7.4 Beispiel zur JTabbedPane()... 153 Seite 4 Version: 5.03
6.8 Die Klasse JTree()... 155 6.8.1 Grafik zu JTree()... 156 6.9 Die Klasse JToolbar()... 157 6.9.1 JToolBar() Konstruktoren... 158 6.9.2 Hinzufügen von Elementen zur JToolBar()... 159 6.9.3 Grafik zur JToolBar()... 160 6.9.4 Beispiel zur JToolBar()... 161 6.10 Die Klasse JOptionPane()... 163 6.10.1 showxxxxdialog()-methoden... 164 6.10.2 Grafik zur JOptionPane()... 165 6.10.3 Einige wichtige Parameter... 166 6.10.4 Rückgabewerte einiger Dialoge... 168 6.10.5 Beispiel für die Methode showmessagedialog()... 169 6.10.6 Beispiel für die Methode showconfirmdialog()... 170 6.10.7 Beispiel für die Methode showinputdialog()... 171 6.11 6.27 Die Klasse JFileChooser()... 172 6.11.1 Grafik zu JFileChooser... 173 6.11.2 Einige nützliche Methoden... 174 7 LayoutManger: GridBagLayout... 175 7.1 Das GridBagLayout... 176 7.2 gridx und gridy... 177 7.3 gridwidth und gridheight... 178 7.4 fill... 179 7.5 ipadx, ipady und insets... 180 7.6 anchor... 181 7.7 weightx und weighty... 182 7.8 Anlegen eines GridBagConstraints... 183 7.9 Setzen der Constraints... 184 7.10 Informationen zu den folgenden Grafiken... 186 7.11 Grafiken zum GridBagLayout... 187 7.12 Beispiel zum GridBagLayout (Rahmen)... 188 7.13 Beispiel Initialisierung der Schaltflächen... 189 8 LayoutManager: GroupLayout... 191 8.1 GroupLayout... 192 8.2 Prinzip des GroupLayout... 193 8.3 Beispiel mit drei Komponenten... 194 8.4 LayoutGroups... 195 8.5 Layout entlang der Achsen... 196 8.6 Beispiel mit vier Komponenten... 197 8.7 Erzeugen einer parallelen Gruppe... 199 8.8 Ausrichtung innerhalb paralleler Gruppen... 200 8.9 Erzeugen einer sequentiellen Gruppe... 201 8.10 Komponenten zu einer Gruppe hinzufügen... 202 8.11 Gruppen zu einer Gruppe hinzufügen... 203 8.12 Größe/Größenanpassung der Komponenten... 204 8.13 Beispiel Größenanpassung... 205 8.14 Lücken(gaps)... 206 8.15 Automatische Lücken konfigurieren... 207 8.16 Eigene Lücken erzeugen... 208 8.17 Arten von Lücken... 210 8.18 linksize(int axis, Component...components)... 211 8.19 GUI zur Laufzeit anpassen... 212 9 MVC und JTable... 215 9.1 Allgemeines... 216 9.2 Schnell und Einfach... 218 Version: 5.03 Seite 5
9.3 JTable-Einstellungen... 220 9.4 Tabellenmodell... 222 9.5 Schritt für Schritt zum eigenen Tabellenmodell... 227 9.6 Optionale weitere Schritte... 231 9.7 Editieren einzelner Felder... 234 9.8 Änderungen am Renderer... 235 9.9 Änderung des Zellen-Editors... 236 9.10 JTree... 237 10 Look & Feel, Internationalisierung... 238 10.1 Look&Feel... 239 10.1.1 Beispiel Look&Feel... 240 10.1.2 Look&Feel setzen... 241 10.1.3 Beispiel Look&Feel setzen... 242 10.1.4 Parameter für die setlookandfeel()-methode... 243 10.1.5 Wahl des Look&Feel durch den UIManager... 245 10.1.6 Look&Feel zur Laufzeit ändern... 246 10.1.7 Beispiel Look&Feel zur Laufzeit ändern... 247 10.2 Internationalisierung (Locale)... 248 10.2.1 Beispiel Anwendung ohne Internationalisierung... 249 10.2.2 Beispiel Anwendung mit Internationalisierung... 250 10.2.3 Schritte zur Internationalisierung... 252 10.2.4 Sprachcodes... 255 10.2.5 Landescodes... 256 10.2.6 Verfügbare Locale bestimmen... 257 10.2.7 Zahlen... 258 10.2.8 Beträge... 260 10.2.9 Datum... 262 10.2.10 Vordefinierte Datumsformate... 264 10.2.11 Zeit... 265 10.2.12 Vordefinierte Zeitformate... 267 10.2.13 Datum und Zeit gleichzeitig... 268 10.3 Zusammenfassung... 270 Seite 6 Version: 5.03