• Keine Ergebnisse gefunden

Programmiertechnik GUI Programmierung mit Java Swing

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmiertechnik GUI Programmierung mit Java Swing"

Copied!
24
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Oliver Haase Hochschule Konstanz 1

Prof. Dr. Oliver Haase

Software Engineering und Verteilte Systeme Raum F012

haase@htwg-konstanz.de Tel: 07531/206-720

Programmiertechnik

GUI Programmierung mit Java Swing

(2)

Java AWT und Swing

Merke: Auch der beste GUI-Designer hat mal klein angefangen!

 Java enthält zwei Pakete zur Programmierung graphischer Oberflächen.

java.awt: Das Abstract Window Toolkit ist das ältere, weniger komfortable Paket.

javax.swing: Swing ist das neuere, komfortablere Paket. Swing baut auf dem AWT auf. In dieser Vorlesung  Swing.

 Zum Auftakt ein einzelnes Swing-Fenster mit Nachricht…

(3)

Oliver Haase Hochschule Konstanz 3

Ein erster Gehversuch…

import javax.swing.*;

public class HelloWorldSwing {

public static void main(String[] args) {

JFrame frame = new JFrame("HelloWorldSwing");

frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

JLabel label = new JLabel("Hello world, "

+ "take a look at my first GUI.");

frame.add(label);

frame.pack();

frame.setVisible(true);

} }

 Und so wird’s gemacht: Swing-Paket importieren

Top-Level Container erzeugen

Programm beenden, wenn

Fenster

zu Label erzeugen

und in Frame einfügen

Größe berechnen

anzeigen

(4)

Top-Level Container

 Jede Swing-Applikation muss als alles umschließende Fenster einen sogenannten Top-Level Container erzeugen.

 Es gibt drei Arten von Top-Level Containern:

JFrame: Hauptfenster, das standardmäßig einen Rahmen mit Titel sowie Funktionsfeldern zum Minimieren, Maximieren und Schließen enthält – und, nicht zu vergessen, eine Java-

Kaffeetasse .

JApplet: Analog für Swing-basierte Java Applets.

(5)

Oliver Haase Hochschule Konstanz 5

Top-Level Container

JDialog : Fenster für einfache Dialoge mit dem Benutzer, etwa kurze Meldungen, die quittiert werden müssen, oder

Auswahllisten. Sind i.d.R. abhängig von einem anderen Top- Level-Container. Beispiel:

(6)

Top-Level Container

 Ein Top-Level Container enthält graphische Komponenten (abstrakte Klasse JComponent).

 Eine Komponente kann sein:

 wieder ein Container (kein Top-Level Container!), oder

 ein graphisches Element wie z.B.

ein Button

ein Label

ein Bild

eine Auswahlliste

(7)

Oliver Haase Hochschule Konstanz 7

GUI-Klassenmodell

Top-Level Container

Komponente

Container graphisches Element

(8)

Innere Container

 Dienen dazu, die graphische Benutzeroberfläche zu strukturieren.

 Es gibt verschiedene Arten innerer Container, z.B.

Panels: Ein Panel ist eine logische Gruppierung von Komponenten. Panels können durch eine eigene

Hintergrundfarbe und/oder einen Rahmen vom umschließenden Container abgesetzt werden.

Top-Level Container (JFrame) rotes Panel

lila Panels

enthält enthält

(9)

Oliver Haase Hochschule Konstanz 9

Innere Container

Scrollbare Container (scroll panes):

Mehrfachcontainer mit Reitern (tabbed panes):

(10)

Interaktive GUI

Interaktive GUI mit Button und Label.

Interaktiv heißt, dass der Benutzer durch seine Aktionen (Klicken des Buttons) Änderungen an der GUI (am Label) durchführen kann.

 Interaktion ist möglich durch ein Event-Listener-Modell.

(11)

Oliver Haase Hochschule Konstanz 11

Event-Listener-Modell

 In einem Programm mit graphischer Oberfläche liegt die Ausführungskontrolle beim Fenstersystem.

 Wenn der Benutzer eine Aktion tätigt (Mausklick, Tastendruck, …), wird ein Event ausgelöst, das vom Fenstersystem an die betreffende Komponente (z.B. an den Button, auf den geklickt wurde)

weitergeleitet wird.

 Daraufhin wird der Code ausgeführt, der mit der Komponente und dem Event verknüpft ist.

 Dazu wird der gewünschte Code als Event-Listener bei der graphischen Komponente angemeldet.

(12)

Event-Listener-Modell

graphische Komponente

(z.B. Button)

Event-Listener

Fenstersystem (Java-

Laufzeitsystem) 1. registrieren

2. Aktion

(z.B. Mausklick) 3. Event an passende

Komponente schicken 4. aufrufen

(13)

Oliver Haase Hochschule Konstanz 13

Schritt 4: Event-Listener aufrufen

Frage: Wie wird der Event-Listener aufgerufen?

Anders formuliert: Welche Methode am Event-Listener-Objekt soll aufgerufen werden, und welche Parameter bekommt diese Methode übergeben?

Beachte: Funktioniert nur, wenn jeder Event-Listener eine

bestimmte Methode implementiert, deren Signatur die graphische Komponente kennt.  Wie kann das garantiert werden?

Antwort: Über eine geeignete Schnittstelle, die jeder Event-Listener implementieren muss!

(14)

ActionListener

 Beispiel: Jeder Event-Listener für einen Button muss die Schnittstelle java.awt.event.ActionListener implementieren.

 Das Interface ActionListener definiert nur eine Methode, nämlich void actionPerformed(ActionEvent e).

 Das Eingabeobjekt e vom Typ ActionEvent gibt Auskunft über die Art des Events, wie z.B. ob die SHIFT- oder CTRL-Taste gedrückt war zum Zeitpunkt des Events. Diese Information kann im Event- Handler-Code verwendet werden.

 Der eigentliche Event-Handler-Code muss in die Methode actionPerformed gesteckt werden.

(15)

Oliver Haase Hochschule Konstanz 15

Schritt 1: Event-Listener registrieren

 Durch die Registrierung wird

 das Event-Listener-Objekt der graphischen Komponente bekanntgemacht;

 durch geeignete Typisierung sichergestellt, dass der Event- Listener die erforderliche Schnittstelle implementiert.

 Der 2. Punkt wird erreicht, indem die Methode zur Registrierung eines Event-Listeners (für Buttons) ein Objekt vom Typ

ActionListener erwartet. D.h. der Event-Listener muss Instanz einer Klasse sein, die die Schnittstelle ActionListener

implementiert.

(16)

Schritt 0: Event-Listener erstellen

 Event-Listener muss

java.awt.event.ActionListener implementieren;

void actionPerformed(ActionEvent e) definieren

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JLabel;

public class MyActionListener implements ActionListener { private int numClicks;

private JLabel label;

public MyActionListener(JLabel label) { this.label = label;

}

public void actionPerformed(ActionEvent e) {

(17)

Oliver Haase Hochschule Konstanz 17

Beispiel-Programm

import javax.swing.*;

import java.awt.*;

public class SwingApplication {

public static final String LABEL_PREFIX = "Number of button clicks: ";

public static Component createComponents() {

JLabel label = new JLabel(LABEL_PREFIX + "0 ");

JButton button = new JButton("I'm a Swing button!");

button.addActionListener(new MyActionListener(label));

JPanel pane = new JPanel(new GridLayout(0, 1));

pane.add(button);

pane.add(label);

pane.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));

return pane;

}

 Hauptklasse:

(18)

Beispiel-Programm

public static void main(String[] args) { // Create and set up the window.

JFrame frame = new JFrame("SwingApplication");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Component contents = createComponents();

frame.add(contents, BorderLayout.CENTER);

// Display the window.

frame.pack();

frame.setVisible(true);

} }

(19)

Oliver Haase Hochschule Konstanz 19

JOptionPane

 Mit Hilfe der Klasse JOptionPane können simple Dialog-Fenster (JDialog) sehr einfach erzeugt werden.

 Die wichtigsten Kategorien sind:

Message Dialog: dient dazu, dem Benutzer eine Nachricht anzuzeigen.

Confirm Dialog: bittet den Benutzer um eine Bestätigung, wie z.B. Yes, No oder Cancel.

Input Dialog: liest eine Auswahl oder eine freie Eingabe des Benutzers ein.

(20)

Message Dialog

 einfachste Form:

JOptionPane.showMessageDialog(null, "hello world!");

 Erster Parameter gibt das Elternfenster an, von dem der Dialog abhängt.

(21)

Oliver Haase Hochschule Konstanz 21

Confirm Dialog

 einfachste Form:

int choice = JOptionPane.showConfirmDialog(null, "Do you want to say hello to the world?");

 Erster Parameter gibt wiederum das Elternfenster an, von dem der Dialog abhängt.

 Rückgabewert gibt die Auswahl des Benutzers an (Index des geklickten Buttons):

(22)

Input Dialog

 einfachste Form:

String input = JOptionPane.showInputDialog(null, "What do you want to say to the world?");

 Erster Parameter gibt wiederum das Elternfenster an, von dem der Dialog abhängt.

 Gibt den eingegebenen Text zurück (null falls mit Abbrechen verlassen)

(23)

Oliver Haase Hochschule Konstanz 23

JOptionPane - Bemerkungen

 Es wurden nur die einfachsten Varianten gezeigt. Alle Kategorien können den Bedürfnissen angepasst werden.

Beispiel: Für ein Input Dialog kann eine Auswahlliste angegebenen werden.

Beispiel: Die möglichen Buttons eines Confirm Dialogs können selbst bestimmt werden.

(24)

Schlussbemerkung…

Referenzen

ÄHNLICHE DOKUMENTE

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

 Dazu muss als Komponententyp der gemeinsame Supertyp, T, von Ohrring und Socke verwendet werden, denn dann kann dank.. Polymorphismus sowohl Ohrring als auch Socke an