• Keine Ergebnisse gefunden

21 Graphische Benutzer-Oberflächen

N/A
N/A
Protected

Academic year: 2022

Aktie "21 Graphische Benutzer-Oberflächen"

Copied!
33
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

21 Graphische Benutzer-Oberflächen

Eine graphische Benutzer-Oberfläche (GUI) ist i.a. aus mehreren

Komponenten zusammen gesetzt, die einen (hoffentlich :-} intuitiven Dialog mit der Benutzerin ermöglichen sollen.

Idee:

• Einzelne Komponenten bieten der Benutzerin Aktionen an.

• Ausführen der Aktionen erzeugt Ereignisse.

• Ereignisse werden an die dafür zuständigen Listener-Objekte weiter gereicht ↑Ereignis-basiertes Programmieren.

(2)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(3)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(4)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(5)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(6)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(7)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(8)

Laufzeit−System

Listener

Listener Listener

Benutzerin

EventDispatcher

Peripherie

EventQueue

(9)

• Maus-Bewegungen und -Klicks, Tastatur-Eingaben etc. werden von der Peripherie registriert und an das ↑Betriebssystem weitergeleitet.

• Das Java-Laufzeit-System nimmt die Signale vom

Betriebssystem entgegen und erzeugt dafür AWTEvent-Objekte.

• Diese Objekte werden in eine AWTEventQueue eingetragen

==⇒ Producer!

• Die Ereignis-Schlange verwaltet die Ereignisse in der Reihenfolge, in der sie entstanden sind, kann aber auch mehrere ähnliche Ereignisse zusammenfassen ...

• Der AWTEvent-Dispatcher ist ein weiterer Thread, der die Ereignis-Schlange abarbeitet ==⇒ Consumer!

(10)

• Abarbeiten eines Ereignisses bedeutet:

1. Weiterleiten des AWTEvent-Objekts an das Listener-Objekt, das vorher zur Bearbeitung solcher Ereignisse angemeldet wurde;

2. Aufrufen einer speziellen Methode des Listener-Objekts.

• Die Objekt-Methode des Listener-Objekts hat für die Reaktion des Applets zu sorgen.

==⇒

• Ereignisse können jederzeit eintreten.

• Ihre Abarbeitung erfolgt sequentiell.

(11)

21.1 Schon mal ein Anfang ...

Beispiel: Ein Knopf :-)

import java.applet.Applet ;

import java.awt.*;

import java.awt.event.*;

publi lass FirstButton extends Applet

implements AtionListener {

Label label;

Button button;

...

(12)

setBakground(Col or .or ang e) ;

setFont(new Font("SansSerif", Font.BOLD, 18));

label = new Label("This is my first button :-)");

add(label);

button = new Button("Knopf");

button.setBakgro un d(C olo r. whi te) ;

button.addAtionL is ten er( th is) ;

add(button);

}

...

• Das Applet enthält zwei weitere Komponenten:

(1) ein Label; (2) einen Button.

• Objekte dieser Klassen besitzen eine Aufschrift :-)

(13)

• Wie bei Applet-Objekten kann der Hintergrund gesetzt werden.

publi void addAtionListener( A tio nL ist ene r

listener) registriert ein Objekt listener als dasjenige, das die von der Komponente ausgelösten AtionEvent-Objekte behandelt, hier: das Applet selber :-).

AtionListener ist ein Interface. Zu seiner Implementierung muss die Methode void ationPerformed(At io nEv ent e)

bereitgestellt werden.

• Die Objekt-Methoden:

void add(Component )

void add(Component , int i)

... fügen die Komponente zum Applet hinten (bzw. an der Stelle i) hinzu.

(14)

publi void paint(Graphis page) {

page.setColor(Col or .re d);

page.fillRet(200 ,0 ,10 0,1 00 );

page.setColor(Col or .bl ue) ;

page.fillRet(225 ,2 5,5 0,5 0) ;

}

publi void ationPerformed(A tio nEv en t e) {

label.setText("Da mn - you pressed it ...");

System.out.printl n( e);

remove(button);

}

} // end of Applet FirstButton

(15)

• Die Methode publi void ationPerformed(A t ion Eve nt e) setzt den Text des Labels auf einen neuen Wert und

beseitigt anschließend den Knopf mithilfe der Objekt-Methode

publi void remove(Component );

• Beim Drücken des Knopfs passiert das Folgende:

1. ein AtionEvent-Objekt action wird erzeugt und in die Ereignis-Schlange eingefügt.

2. Der AWTEvent-Dispatcher holt action wieder aus der

Schlange. Er identifiziert das Applet app selbst als das für

ation zuständige Listener-Objekt. Darum ruft er app.ationPerform ed ( action ); auf.

• Wären mehrere Objekte als listener registriert worden, würden sukzessive auch für diese entsprechende Aufrufe abgearbeitet werden.

(16)
(17)
(18)

Beachte:

• Die in den Labels verwendete Schriftart richtet sich nach der des umgebenden Applets (zumindest in der Größe :-).

• Die Objekt-Methoden:

publi String getText();

publi void setText(String text);

... gestatten den Zugriff auf den Text eines Label- (Button- oder

TextComponent) Objekts.

• Die hinzugefügten Komponenten liegen im Applet-Feld vor der graphischen Darstellung, die die paint()-Methode erzeugt.

• Jede Komponente weiss, wie sie neu gemalt werden muss ...

(19)

21.2 Einfache AWT-Komponenten Eine Übersicht ...

Canvas Choice

List Checkbox ItemSelectable

TextArea TextField Scrollbar

Label

TextComponent Button Component

Adjustable

(20)

Canvas eine Fläche zum Malen ...

Label zeigt eine Text-Zeile.

Button einzelner Knopf, um eine Aktion auszulösen.

Scrollbar Schieber zur Eingabe von (kleinen) int-Zahlen.

(21)

Canvas eine Fläche zum Malen ...

Label zeigt eine Text-Zeile.

Button einzelner Knopf, um eine Aktion auszulösen.

Scrollbar Schieber zur Eingabe von (kleinen) int-Zahlen.

Beispiel:

import java.applet.Apple t;

import java.awt.*;

import java.awt.event.*;

publi lass SalingFun extends Applet

implements AdjustmentListener {

private Srollbar sHeight, sWidth;

private Image image;

...

(22)

publi void init() {

setBakground(Colo r. whi te) ;

image = getImage(getDoume nt Bas e( )," df9 91 230 .jp g" );

setLayout(new BorderLayout());

sHeight = new Srollbar(Srollb ar .VE RTI CA L,

500,50,0,550);

sHeight.addAdjustm en tLi ste ne r(t hi s);

add(sHeight,"West" );

sWidth = new Srollbar(Srollba r. HOR IZO NT AL,

600,50,0,650);

sWidth.addAdjustme nt Lis ten er (th is );

add(sWidth,"South" );

}

(23)

• Ein Srollbar-Objekt erzeugt AdjustmentEvent-Ereignisse.

• Entsprechende Listener-Objekte müssen das Interface

AdjustmentListene r implementieren.

• Dieses Interface verlangt die Implementierung einer Methode

publi void adjustmentValueCha nge d( Adj ust me ntE ven t e);

• Die init()-Methode des Applets legt zwei Srollbar-Objekte an, eines horizontal, eines vertikal.

Dafür gibt es in der Klasse Srollbar die int-Konstanten

HORIZONTAL und VERTICAL.

• Der Konstruktor publi Srollbar(int dir,int init, int slide, int min, int max); erzeugt ein Srollbar der Ausrichtung dir mit Anfangsstellung init, Dicke des Schiebers

slide, minimalem Wert min und maximalem Wert max. Aufgrund der Dicke des Schiebers ist der wirkliche

Maximal-Wert max - slide.

(24)

void addAdjustmentList ene r( Adj ust me ntL ist en er adj);

registriert das AdjustmentListener-Objekt als Listener für die

AdjustmentEvent-Objekte des Scrollbars.

• Das selbe Objekt kann mehrmals als Listener auftreten ;-)

Bleibt, das Geheimnis um Layout und West bzw. South zu lüften ...

• Jeder Container, in den man weitere Komponenten schachteln möchte, muss über eine Vorschrift verfügen, wie die

Komponenten anzuordnen sind.

• Diese Vorschrift heißt Layout.

Zur Festlegung des Layouts stellt Java das Interface

LayoutManager zur Verfügung sowie nützliche implementierende Klassen ...

(25)

• Eine davon ist das BorderLayout.

• Mithilfe der String-Argumente:

BorderLayout.NORT H = "North",

BorderLayout.SOUT H = "South",

BorderLayout.WEST = "West",

BorderLayout.EAST = "East" und

BorderLayout.CENT ER = "Center"

kann man genau eine Komponente am bezeichneten Rand bzw.

der Mitte positionieren.

(26)

page.drawImage(im ag e,0 ,0, wi dth ,he ig ht, th is) ;

}

publi void adjustmentValueCha nge d(A dj ust me ntE ven t e) {

Adjustable s = e.getAdjustable();

int value = e.getValue();

if (s == sHeight) height = value;

else width = value;

repaint();

}

} // end of Applet SalingFun

(27)

• Um AdjustmentEvent-Objekte behandeln zu können, implementieren wir die Methode

AdjustmentValueCh an ged (Ad ju stm ent Ev ent e);

• Jedes AdjustmentEvent-Objekt verfügt über die Objekt-Methoden:

publi AdjustmentListene r getAdjustable();

publi int getValue();

... mit denen das auslösende Objekt sowie der eingestellte

int-Wert abgefragt werden kann.

• Dann sieht das Applet so aus ...

(28)
(29)
(30)

Texteingabe:

TextField zeigt eine Text-Zeile, die vom Benutzer modifiziert werden kann.

TextArea zeigt mehrere modifizierbare Text-Zeilen.

Auswahl aus mehreren Alternativen:

List scrollbare Liste wählbarer Items;

Choice analog List – nur mit Anzeige des ausgewählten Items.

Checkbox kann nur die Werte true oder false annehmen.

Mehrere davon können jedoch in einer ChekBoxGroup

zusammengefasst werden.

(31)

Beispiel: Eine Choice-Liste ...

import java.applet.Applet ;

import java.awt.*;

import java.awt.event.*;

publi lass FirstChoie extends Applet

implements ItemListener {

private Color olor = Color.white;

private Choie olorChooser;

...

(32)

setFont(new Font("Serif", Font.PLAIN, 18));

olorChooser = new Choie();

olorChooser.setB a kgr oun d( Col or. wh ite );

olorChooser.add( "w hit e") ;

olorChooser.add( "r ed" );

olorChooser.add( "g ree n") ;

olorChooser.add( "b lue ");

olorChooser.addI te mLi ste ne r(t his );

add(olorChooser) ;

setBakground(Col or .or ang e) ;

}

...

(33)

publi Choie(); legt ein neues Choie-Objekt an;

• Zu diesem Objekt können beliebig viele Items hinzugefügt werden. Dazu dient die ObjektMethode:

publi void add(String str);

publi void addItemListener(It emL is ten er listener);

registriert das Objekt listener für die erzeugten

ItemEvent-Objekte.

ItemListener ist ein Interface ähnlich wie AtionListener.

• Wieder fügen wir die neue Komponente mithilfe von void

add(Component omp) dem Applet hinzu.

Referenzen

ÄHNLICHE DOKUMENTE

In this experiment we investigate whether the meaning of a synthesized vocalization can be modified towards an intended target meaning by imposing a suitable intonation contour onto

The approach is based on first detecting salient acoustic events using PCA of low level acous- tic features extracted from voiced frames, and then classifying sep- arately higher

We conclude the fol- lowing issues from this study: (i) this methodology can provide a typical impression of meanings from high agreement annotations; (ii) unit-selection algorithms

In a listener experiment, we assess the quality of the synthesised stimuli resulting from the application of dif- ferent prosody modification techniques; we also investigate the

Do affect bursts, used as listener feedback in the context of a short dialogue fragment with an emotionally inexpressive speaker utterance, convey the same emotions as in

Three types of information based on acoustic analysis are used for the agent control at the moment: speech pauses, pitch, and the level of the user’s interest.. These

tempt to identify relevant categories of meaning for lis- tener vocalizations in a German dialog corpus, which was recorded in view of interactive speech synthesis as a long-

Our part of the work is mainly focusing on modules for synthesis of appropriate listener vocalizations when the intended meaning behind the listener intention is given.. This