Swing Grundlagen Andre Eichmann
Inhaltsverzeichnis Swing: Grundlagen - Einleitung - Ein einleitendes Beispiel Swing: Container und Menüs - Hauptfenster - Menüs
Swing: Grundlagen Nachteile von AWT: - Schwierig, plattformübergreifendes Look-And-Feel zu realisieren - Zu kleine Grundmenge an Dialogelementen, großer Aufwand Eigenschaften von Swing: - Nur noch in sehr eingeschränkter Weise plattformspezifische GUI-Ressourcen - Alles wird von Swing selbst gezeichnet
Swing: Grundlagen Vorteile: - Keine plattformspezifischen Besonderheiten, einfacherer Code - Gleiches Aussehen und Bedienung, gleiche Oberfläche - Komplexe Dialogelemente wie Bäume, Tabellen, Registerkarten können komplett plattformunabhängig realisiert werden Pluggable Look-And-Feel: - Aussehen und Bedienung kann zur Laufzeit geändert werden - Windows hat 3 vordefinierte (Metall, Motif, Windodws) - Es können eigene geschrieben werden - Kein zusätzlicher Aufwand des Programms nötig zum Umschalten (wird über Menüs realisiert) - Das Umschalten wird vom User-Interface-Manager erledigt (koordiniert alles)
Swing: Grundlagen Modell-View-Controller Prinzip (MVC): - Code nicht in einer Klasse, sondern 3 Bestandteile: - Modell enthält Daten des Dialogelementes, speichert den Zustand - View für grafische Darstellung verantwortlich - Controller Verbindungsglied zwischen beiden. Empfängt Tastatur Mausereignisse, stößt richtige Maßnahmen an Nachteile der Swing: - Ressourcenhungrig, da alles selbst gezeichnet wird - Applet-Programmierer haben keinen Browser mit eingebauter Swingunterstützung - Die Probleme werden aber angegangen (Bugs behoben, bessere Rechner, bessere Umsetzung)
Swing: Grundlagen Beispielprogramm für ersten Eindruck
Swing: Grundlagen Erläuterungen und erste Befehle im Beispiel: JFrame: - Klasse zum Erzeugen von Hauptfenstern (eine von vier) - Ähnliche Eigenschaften wie Frame - Der Unterschied ist, dass man mit add nicht einfach die Komponenten auf dem Fenster platzieren kann JPanel: - Hier wird auf dem JPanel die Buttonleiste und das Textfeld platziert - Dient dazu, um viele Dialogelemente unter Kontrolle eines Layoutmanagers anzuordnen - Die Dialogelemente und der Layoutmanager werden direkt zugewiesen
Swing: Grundlagen JLabel: - Ein Dialogelement zur Anzeige (eines meist unveränderlichen) Textes - Im Gegensatz zum Label kann ein JLabel auch Icons enthalten JTextfield: - Ein einzeiliges Eingabefeld für Textdaten - Zur Eingabe von Passwörtern eignet sich die aus JTextfield abgeleitete Klasse JPasswordfield
Swing: Grundlagen Tooltips und Umrandungen: - Tooltips werden mit der Methode settooltiptext realisiert - Hilfestellung für den Benutzer bei der Nutzung des Programms - Werden angezeigt beim Überfahren der Dialogelemente mit der Maus - Mit der Methode setborder und der Klasse Border realisiert - Diese wird mit der create-methode oder der Klasse Border erzeugt - Im Beispielprogramm werden die beiden Panels eingerahmt JButton: - Dient zur Darstellung von Schaltflächen - Erbt die meisten Eigenschaften aus der Vaterklasse AbstractButton - Diese vererbt ihr Eigenschaften auch an Menüeinträge - Grundlagen der Bedienung ähneln denen der Klasse Button
Swing: Grundlagen JList und JScrollPane: - JList ist eine Liste von Werten, in der mehrere ausgewählt werden können (Ähnelt der List aus AWT, aber mehr Funktionen ) - Mit Hilfe von Listenmodels (Instanz der Klasse ListModell) sehr komplexe und dynamische Datenstrukturen repräsentiert werden - Auch Grafiken und Objekte können angezeigt werden - Keine automatische Scrollbar - Für Scrollbar wird die Liste in JScrollPane eingebettet - Kümmert sich um alle Details des Scrollens und der Daten
Swing: Grundlagen Umschalten von Look-And-Feel - Durch Aufruf der Methode setlookandfeel schaltet der UI-Manager das Look-And-Feel um - Anschließend mit updatecomponenttreeui der Klasse SwingUtilities neue Darstellung des Dialogs - Am Besten mit einer Exception mögliche Fehler abfragen
Swing: Container und Menüs - Hauptfenster - Menüs
Hauptfenster: JFrame: - Wichtigstes Hauptfenster - Stellt Hauptfenster mit Rahmen, Systemmenü und Standartschaltflächen zur Verfügung - Da JFrame aus Frame abgeleitet ist, stehen alle Methoden aus Window, Container und Component zur Verfügung Kleines Beispiel: Hauptfenster JFrame
RootPane, LayeredPane, ContentPane (1): - Bedeutender Unterschied in der Struktur der Komponenten zwischen AWT und Swing - Daraus resultiert unterschiedliche Bedienung - In AWT werden Komponenten direkt auf dem Fenster platziert - In Swing-Hauptfenster nimmt eine Komponente alle anderen Komponenten auf - Die Hauptkomponente nennt sich RootPane und ist eine Art Verwaltungsinstanz - RootPane ist vom Typ JRootPane
RootPane, LayeredPane, ContentPane (2): RootPane hat folgende Komponenten: - eine aus Container abgeleitete GlassPane - eine aus JLayeredPane abgeleitete LayeredPane LayeredPane enthält zwei weitere Unterkomponenten: - eine aus Container abgeleitete ContentPane - eine aus JMenuBar abgeleitete Menüleiste
RootPane, LayeredPane, ContentPane (3): - GlassPane und LayeredPane liegen übereinander - GlassPane ist meist durchsichtig und wird meist nicht zur Grafikausgabe genutzt (nur, wenn das ganze Fenster betroffen ist) - LayeredPane enthält Menü- und Dialogelemente und kann sie nebeneinander und übereinander anordnen (Menü's) - RootPane wird mit GlassPane, LayeredPane und ContentPane automatisch beim Anlegen erzeugt - Mit getcontentpane werden die Koponenten platziert - Mit Getter- und Settermethoden ist der strukturelle Aufbau veränderbar Kleines Beispiel: Dialogelementen platzieren
JWindow: - 2. Hauptfensterklasse, aus Window abgeleitet - Dient dazu, ein rahmenloses Fenster an beliebiger Stelle und Größe auf dem Bildschirm zu platzieren - Besitzt auch eine RootPane wie JFrame mit den gleichen Strukturen Kleines Beispiel: Splashscreen
JDialog: - Dialogfenster werden meist nur kurz aufgerufen - Kurze Kommunikation zwischen Anwender und Programm - Keine Menüs, eingeschränkte Funktion - Größe meist nicht veränderbar - Als modales Fenster wird während des Ausführens das restliche Programm angehalten - Auch hier: Hinzufügen und Anordnen von Komponenten auf der ContentPane - Bei einem modalen Dialog wird der Aufruf von show (setvisible(true)) erst beendet, wenn der Dialog geschlossen wird - Bei nicht modalen Fenstern geht es gleich nach show weiter
JOptionPane: - Weitere Möglichkeit Swingdialoge zu erzeugen mit der Klasse JOptionPane - Für einfache Dialoge mit Icon und Text, Eingabefeld, Button's Yes, No, Cancel - Zum Erzeugen einer statischen Methode - Einfache Abfragen können realisiert werden - Einfache Rückgabe Beispiel: Abfragefenster
JApplet: - Dient zur Entwicklung von Applets, die Swing-Dialogelemente zur Gestalltung der Oberfläche nutzen - Auch hier die RootPane-Struktur Beispiel: Applet
JInternalFrame: - Erzeugung von Haupt- und Unterfenstern - Multiple Document Interface (MDI) weit verbreitet, z.b. Textverarbeitung, Grafikprogramme, Entwicklungsumgebung - In AWT nicht möglich - In Swing zwei Komponenten nötig: - Hauptfenster Desktop - Unterfenster Kindfenster Hauptfenster: - Jede Hauptfensterklasse geeignet, JFrame bevorzugt - Für Kindfensterverwaltung wird die Klasse JDesktopPane verwendet - Sie besitzt einen DesktopManager zur Verwaltung der Kindfenster für Verschieben, Verkleinern, Vergrößern, usw.
Kindfenster: - Sind aus JInternalFrame abgeleitet, täuscht Hauptfenster vor - Ist direkt aus aus JComponent abgeleitet und nicht aus JFrame - Da MDI-Kindfenster nicht auf allen grafischen Oberflächen zur Verfügung stehen, wurde es so gemacht - Zum Aktivieren mit setvisible sichtbar machen und mit add platzieren Konsequenz: - Übliche Ausstattung muss nachgebildet werden (Rahmen, Titelleiste, Buttons, verschieben usw.) - Programmierschnittstelle von Frame muss nachgebildet werden Beispiel: Desktop und Kindfenster
Menüs JMenuBar: - Alle Fenster außer JWindow können Menüleiste haben - Wird dem Hauptfenster durch add JMenuBar zugefügt - Starke Ähnlichkeit zu AWT JMenu: - Mit add werden neue Menüeinträge hinzugefügt
JMenuItem: - JMenuItem repräsentiert Menüeinträge, also Elemente, die sich in einem Menü befinden - Es handelt sich dabei um Texte, die mit Icons oder Häkchen versehen werden können - Da JMenu aus JMenuItem abgeleitet ist, kann man so Menüeinträge schachteln Beispiel: Hauptmenü
Untermenüs: - Da Menu aus MenuItem abgeleitet ist, kann an die Methode add der Klasse Menu auch eine Instanz der Klasse übergeben werden - Kleiner Pfeil zeigt an, dass es ein Untermenü gibt Icons in Menüeinträgen: - Ein Icon-Objekt kann direkt an den Konstruktor von MenuItem übergeben werden - Auch über seticon möglich - Icon kann einfach durch ImageIcon aus gif- oder jpeg-dateien erzeugt werden Beispiel Menüs
Swing Quellenangabe: - Handbuch der Javaprogrammierung - Skript
Ende Vielen Dank für Ihre Aufmerksamkeit And let's Swing!