Einführung in JFC/Swing

Werbung
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
Herunterladen