FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing K01 Einführung in JFC/Swing • Inhalt 1. Grafische User-Interfaces GUI 2. Java Foundation Classes JFC 1. 1. 2. 3. 3. Model-View-Controller AWT Swing JFC Swing 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Vorteile/Nachteile von Swing Einsatz von Swing Pakete von Swing Begriffe Top-Level-Container Klassenhierarchie von Swing JRootPane Unterschied AWT und Swing Schliessen eines Swing-Fensters Beispiel Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 1 Lernziele • Sie kennen die Vor- und Nachteile von Swing • Sie wissen wo Sie Swing ohne Einschränkungen einsetzen können • Sie kennen die Pakete von Swing • Sie kennen die Klassenhierarchie von Swing und die Top-Level Container • Sie wissen was eine RootPane ist und welche Komponenten dazu gehören • Sie können Komponenten richtig in einer Pane platzieren • Sie wissen wie das Hauptfenster in einer SwingApplikation geschlossen wird Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 2 Seite 1 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.1 Grafische User-Interfaces GUI • Ein Grafisches User-Interface GUI zeichnet sich aus durch: – Bedienung über Tastatur, Maus, Stift, Sprache usw. – Darstellung der Informationen grafisch in Bildschirmfenstern • Bei den GUI kommt es zum Zusammenspiel von drei Bereichen: – Model-View-Controller (MVC) • Model = Datenstruktur, Businesslogik • View = Darstellung der Daten • Controller = Verarbeitung der Benutzeraktionen Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 3 1.1.1 Model-View-Controller (MVC) • Übersicht View 1 Benachrichtigen Beschaffen View 2 Steuern Steuern Controller 1 Controller 2 Setzen Setzen Ausgabeschicht Benutzerschnittstelle Benachrichtigen Anwendungsobjekt Model Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 4 Seite 2 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.1.1 Model-View-Controller (MVC) • Das Model: – – – – Beinhaltet die Anwendungsdaten und Kernfunktionen der Applikation Ist unabhängig vom User-Interface (UI) Bestimmt, wie sich die Applikation verhält (Businesslogik) Benachrichtigt den Controller über Änderungen des Models • Der View stellt die Daten des Models auf einem Display dar – Markiert die Ausgabeschicht – Definiert das Aussehen der Applikation • Der Controller ist Schnittstelle zwischen Benutzeraktionen und Applikation – Interpretiert empfangene UI-Events – Ruft die entsprechenden Service-Methoden des Models auf Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 5 1.2 Java Foundation Classes JFC • Bestehend aus den Paketen: • AWT – GUI-Toolkit – Aussehen der Komponenten wird durch Betriebssystem definiert • Swing – Moderneres GUI-Toolkit, erweitert AWT – Aussehen der Komponenten wird durch Java definiert – Dynamisches Look and Feel • Java 2D – Graphics (1.2) • API's für Drucken und Datentransfer – java.awt.print – java.awt.datatransfer Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 6 Seite 3 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.2.1 AWT • Abstract Window Toolkit AWT des JDK 1.0 – Ideal für einfache Web-Anwendungen – Ungeeignet für komplexere Anwendungen – Sehr langsam und fehlerbehaftet – Unzulängliches Event-Modell • Abstract Window Toolkit AWT des JDK 1.1 – Grosse Verbesserungen gegenüber AWT 1.0 – Schneller und robuster – Verbessertes Programmierkonzept (JavaBeans, Event-Subscriber-Mechanismus) – Immer noch zu wenig Interaktionsobjekte! Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 7 1.2.2 Swing • Swing-Klassen als Bestandteil der JFC – Einführung März 1998 • Zusammenarbeit zwischen Netscape und Sun – komplett in Java verfasst, damit Plattform unabhängig • Lightweight Components – Neue Features und Verbesserungen: • Pluggabel Look & Feel (PLAF) • Verbessertes Keyboard-Handling • Debugging für GUI-Rendering • Eine Vielzahl neuer Interaktionsobjekte Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 8 Seite 4 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.2.3 JFC Application AWT Components Swing Frame Button Scrollbar Window Dialog Frame AWT Event Font Color Graphics Tool Kit Accesibility Java 2D Drag & Drop AWT JFC Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 9 1.3.1 Vorteile von Swing (1) • Swing wurde als Meilenstein einer neuen GUI-Generation gefeiert – Unabhängig von dem GUI-API des Betriebssystems – Komplette grafische Benutzerschnittstelle – Viele vordefinierte Komponenten • Einige herausragende Features von Swing: – Pluggable Look & Feels • Anpassbare grafische Oberfläche (Windows, Motif, Mac) – Lightweight Components • Leichtgewichtige Komponenten – Vereinfachte Model-View-Controller-Architektur • Engere Verknüpfung zwischen View und Controller • Auch Model-View-Presenter-Architektur (MVP) genannt Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 10 Seite 5 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.1 Nachteile von Swing (2) • Swing ist ressourcenintensiv – Schnelle Prozessoren – Swing-konformen Web-Browser (Applet) • Applets – Benötigen einen Swing-fähigen Web-Browser • Minimum JRE 1.2 (nicht volle Unterstützung von Swing) • Besser ab JRE 1.3 (Mozilla, Netscape, Opera) • Zusätzliche Möglichkeiten ab JRE 1.4 • Keine direkte Unterstützung von Java in zukünftigen Versionen des Microsoft Internet Explorers IE – Installation von JRE-Plugins können einem "normalen" Benutzer nicht zugemutet werden Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 11 1.3.2 Einsatz von Swing • Hier kann Swing problemlos eingesetzt werden: – Eigenständige Applikationen – Applets in einem Intranet • Hier sollte Swing nicht unbedingt eingesetzt werden: – Applets für öffentliche Home-Pages – Applikationen für PDA‘ s, Handys • Andere Möglichkeiten – Markup Languages (Auszeichnungs-Sprachen) • HTML, XML/XSL – Dynamische Inhalte • Java Server Pages (JSP), PHP Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 12 Seite 6 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.3 Pakete von Swing • javax.swing – Enthält die meisten Komponenten von Swing – Muss in jede Swing-Applikation mit importiert werden • javax.swing.event – Swing-Komponenten arbeiten ereignisgesteuert – Komponenten, die auf Ereignisse reagieren sollen, müssen ActionListener implementieren • javax.swing.plaf – plaf steht für pluggable look and feel – Enthält Interfaces, die das Umschalten zwischen verschiedenen Oberflächen erlaubt • javax.swing.table – Enthält Klassen und Interfaces für die Unterstützung der Komponente JTable • javax.swing.text – Behandlung von editierbaren und nicht-editierbaren Eingabefeldern • javax.swing.text.rtf – Behandlung von Text im Rich Text Format RTF Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 13 1.3.4 Begriffe (1) • Component – Umfasst alle möglichen grafischen Komponenten • Applikations- bzw. Applet-Fenster bis zu spezialisierten Komponenten für Passwörter, Bilder oder Zeichnungen • Look-and-Feel – Form und Verhalten von Komponenten (Component) • Heavyweight Component – Komponenten sind direkt an Fenster des Betriebssystems gebunden • Look-and-Feel an Betriebssystem gebunden ð AWT • Lightweight Component – Komponenten werden mit Hilfe von 2D-Grafikroutinen innerhalb von heavyweight Komponenten gezeichnet • Look-and-Feel vom Betriebssystem unabhängig ð Swing Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 14 Seite 7 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.4 Begriffe (2) • Container – Container sind spezielle Komponenten • Können andere Komponenten, auch andere Container aufnehmen • Layout-Manager – Übernehmen die Anordnung der Komponenten in einem Container • Es gibt verschiedene vordefinierte Layout-Manager • Sind entweder dem Container fest zugeordnet oder frei wählbar bzw. auch frei implementierbar • Top-Level-Container – Sind Container, die als äusseres Fenster gewählt werden können Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 15 1.3.5 Top-Level-Container (1) • Ausgangspunkt für jede grafische Anwendung ist ein Top-Level-Container – Heavyweight Komponente – Nativer Peer (gleichartiges Fenster der Plattform) Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 16 Seite 8 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.5 Top-Level-Container (2) • Top-Level-Container – Aufnahme von Komponenten und Subcontainer • Top-Level-Container in AWT – Frame, Applet, Window, Dialog • Top-Level-Container in Swing – JFrame, JApplet, JWindow, JDialog • Eine zu AWT äquivalente Komponente in Swing hat den gleichen Namen mit dem Präfix “J“ – Frame ó JFrame Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 17 1.3.5 Top-Level-Container (3) • Top-Level-Container in Swing – JFrame • für Applikationsfenster – JApplet • für Web-Applets – JWindow • seltener verwendet – JDialog • für Dialogfenster Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 18 Seite 9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.6 Klassenhierarchie von Swing (1) • JComponent ist die Basisklasse in Swing • Alle Komponenten in Swing werden von JComponent abgeleitet – Nutzung der erweiterten Eigenschaften von Swing • Ausnahme – Top-Level-Container in Swing • Sind von ihren AWT-Pendants abgeleitet • Müssen also zwangsläufig ein einzelnes inneres Objekt JRootPane haben • JRootPane wird in jedem Root-Container von Swing automatisch erzeugt • JRootPane ist von JComponent abgeleitet Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 19 1.3.6 Klassenhierarchie von Swing (2) Sind Sindvon vonihren ihren AWT-Pendants AWT-Pendants abgeleitet isisa“ )) abgeleitet(“ (“ a“ Haben Habeninneres inneres Objekt Objekt von von JRootPane JRootPane (“ has )) (“ hasa“ a“ Ist Istvon von JComponent JComponent abgeleitet isisa“ )) abgeleitet(“ (“ a“ Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 20 Seite 10 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.7 JRootPane (1) • Unterschied zwischen den AWT- und Swing-Hauptfenstern: – Komponenten werden in AWT direkt auf dem Fenster platziert – Swing-Hauptfenster besitzt eine einzige Hauptkomponente, die alle anderen Komponenten aufnimmt • Diese Hauptkomponente wird als RootPane bezeichnet – Ist vom Typ JRootPane – Übernimmt Rolle von Verwaltungsinstanz für alle anderen Komponenten des Hauptfensters • RootPane enthält folgende Komponenten: – GlassPane, aus Container abgeleitet – LayeredPane, aus JLayeredPane abgeleitete • Die LayeredPane enthält zwei Unterkomponenten: • ContentPane aus Container abgeleitete • Menüleiste aus JMenuBar abgeleitete Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 21 1.3.7 JRootPane (2) • Struktur einer RootPane Menüleiste Menüleiste <JManuBar> <JManuBar> GlassPane GlassPane <Container> <Container> LayeredPane LayeredPane <JLayeredPane> <JLayeredPane> ContentPane ContentPane <Container> <Container> Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 22 Seite 11 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.7 Interface RootPaneContainer • Das Interface RootPaneContainer wird von allen Root-Containern implementiert • Damit erhält man Zugriff auf die internen Komponenten von JRootPane interface RootPaneContainer { JRootPane getRootPane(); Component getGlassPane(); JLayeredPane getLayeredPane(); Container getContentPane(); void setGlassPane (Component glassPane); void setLayeredPane(JLayeredPane layeredPane); void setContentPane(Container contentPane); } Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 23 1.3.8 Unterschied AWT und Swing • Komponenten werden in AWT direkt auf dem Fenster platziert frame.add(component); • In Swing muss ein Component-Objekt zu einer Pane hinzugefügt werden Container contentPane = frame.getContentPane(); contentPane.add(component); • oder frame.getContentPane().add(component); Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 24 Seite 12 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing 1.3.9 Schliessen eines Swing-Fensters • JFrame verhält sich beim Schliessen anders als Frame • Das Verhalten kann man mit der Methode setDefaultCloseOperation(int) einstellen Konstante Beschreibung WindowConstants.DO_NOTHING_ON_CLOSE Verhält sich wie Frame. Mit einem WindowListener kann man auf windowClosing() reagieren WindowConstants.DO_HIDE_ON_CLOSE (Default) Setzt Fenster in den Hintergrund WindowConstants.DO_DISPOSE_ON_CLOSE Alle Listener werden abgearbeitet und das Fenster geschlossen JFrame.EXIT_ON_CLOSE Beendet die Applikation mit System.exit(1) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 25 1.3.10 Beispiel import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JButtonDemo extends JFrame { public JButtonDemo() { super("Ein einfacher JFrame"); //Layout setzen und Buttons hinzufügen Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(3, 1)); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("Button 2")); contentPane.add(new JButton("Button 3")); } public static void main(String[] args) { JButtonDemo wnd = new JButtonDemo(); wnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); wnd.setLocation(100, 100); wnd.setSize(300, 200); wnd.setVisible(true); } } Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 26 Seite 13 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing Zusammenfassung • Swing ist eine Erweiterung des AWT • Swing bietet ein pluggable look & feel für das Anpassen der grafischen Benutzeroberfläche • Der Einsatz von Swing in Applets ist mit Einschränkungen verbunden • Eine zu AWT äquivalente Komponente in Swing hat den gleichen Namen mit dem Präfix “J“ • Alle Komponenten in Swing werden von JComponent abgeleitet – Ausnahme: Root-Container K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 27 Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 28 Seite 14 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing @ Übungsaufgabe U01.1 • Implementieren Sie das kleine Beispielprogramm aus Abschnitt 1.3.10 • Falls Sie mit einer IDE arbeiten, versuchen Sie, das Beispielprogramm mit den entsprechenden Werkzeugen zu erzeugen • Ergänzen Sie das Beispielprogramm so, dass vor jedem Button ein Label steht K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 29 Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 30 Seite 15 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Swing/JFC K01 Einführung in JFC/Swing @ Übungsaufgabe U01.2 (1) • Gegeben ist die Demo-Applikation SwingSet2 http://iserver.hta.fhz.ch/~zaschmid/NDSI_17_05.html ð Übungen/Repetitionsfragen ð U01.2:SwingSet2 • Führen Sie die Applikation aus – Als Applikation java –jar SwingSet2.jar – Als Applet appletviewer SwingSet2.html • Machen Sie sich mit den Komponenten von Swing vertraut • Ändern Sie über das Menü das Look-and-Feel. Untersuchen Sie die Komponenten bezüglich Aussehen und Verhalten? Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01 Einführung in JFC/Swing Folie 31 @ Übungsaufgabe U01.2 (2) • Finden Sie heraus wie die Methode getContentPane in der Datei SwingSet2.java zur Anwendung kommt • Betrachten Sie die folgenden Dateien im SourceCode genauer: – – – – ButtonDemo.java ComboBoxDemo.java ListDemo.java SliderDemo.java Abteilung Informatik, JFC/Swing 2004 © Diego Schmidlin V2.1 K01_Einführung_in_JFC_Swing-P.ppt, V2.1 2004 © Diego Schmidlin K01 Einführung in JFC/Swing Folie 32 Seite 16