• Keine Ergebnisse gefunden

Beuth Hochschule Behandler-Klassen, -Objekte und -Methoden WS15/16, S. 1

N/A
N/A
Protected

Academic year: 2021

Aktie "Beuth Hochschule Behandler-Klassen, -Objekte und -Methoden WS15/16, S. 1"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Beuth Hochschule Behandler-Klassen, -Objekte und -Methoden WS15/16, S. 1 Behandler-Klassen, -Objekte und -Methoden

Zur Erinnerung:

1. Die Ereignis-Art actionPerformed gehört zur Oberart Aktions-Ereignis.

2. Der Oberart Aktions-Ereignis ist die Schnittstelle ActionListener zugeordnet.

3. Die Schnittstelle ActionListener enthält (nur) eine Methode namens actionPerformed.

Im Programm Grabo30 wird ein JButton-Objekt namens meinKnopf mit der Beschriftung Knopf37 vereinbart. Bei diesem Knopf-Objekt wird ein Behandler-Objekt (namens behandlerOb- jekt) einer Behandler-Klasse (namens BehandlerKlasse) angemeldet. Dieses Behandler-Objekt enthält eine Methode namens actionPerformed. Diese Methode wird jedes mal ausgeführt, wenn der Benutzer auf den Knopf37 klickt. Die Methode gibt dann eine Meldung zur Standardausgabe aus.

Auf dem Bildschirm zeigt das Programm Grabo30 ein kleines Fenster an, welches etwa so aussieht:

Das Programm Grabo30 gibt Meldungen wie die folgenden zur Standardausgabe aus, bis der Benutzer es mit einem Klick auf den Fenster-Schließen-Knopf (den rechts oben mit dem x darin) beendet:

Grabo30: Here we go!

--- --- Grabo30: That's all!

Uhrzeit in Millisekunden: 1.478.881.348.762 Uhrzeit in Millisekunden: 1.478.881.349.978 Uhrzeit in Millisekunden: 1.478.881.350.930 Uhrzeit in Millisekunden: 1.478.881.351.913 Uhrzeit in Millisekunden: 1.478.881.403.284

In diesem Beispiel hat der Benutzer offenbar 5 Mal auf den Knopf37 geklickt, bevor er das Programm Grabo30 wieder beendet hat.

Die folgenden beiden Programme Grabo30 und Grabo31 leisten weitgehend das Gleiche.

Beide melden ein Behandler-Objekt (des Typs ActionListener) bei einem Grabo-Objekt (des Typs JButton) an. Die Anmeldung erfolgt aber auf zwei verschiedene Weisen, einmal "mit Namen" und einmal "ohne Namen".

(2)

S. 2, WS15/16 Behandler-Klassen, -Objekte und -Methoden Beuth-Hochschule

1 // Datei Grabo30.java

2 /* --- 3 Ein Grabo30-Objekt ist ein Fenster (JFrame-Objekt) mit einem

4 Knopf (JButton-Objekt) darin. Wenn der Benutzer auf den Knopf klickt, 5 wird zur Standardausgabe ausgegeben, wie viele Millisekunden seit 6 Beginn des Tages 01.01.1970 vergangen sind.

7

8 In dieser Version wird ein Behandler-Objekt (namens behandlerObjekt) 9 einer Behandler-Klasse (namens BehandlerKlasse) bei dem Knopf angmeldet.

10 Siehe auch Grabo31.java.

11 --- */

12 import javax.swing .JFrame;

13 import javax.swing .JButton;

14 import java .awt .event.ActionListener;

15 import java .awt .event.ActionEvent;

16

17 class Grabo30 extends JFrame {

18 // --- 19 private JButton meinKnopf;

20 // --- 21 // Eine Behandler-Klasse (mit Namen) vereinbaren:

22 private static class BehandlerKlasse implements ActionListener { 23 public void actionPerformed(ActionEvent ae) {

24 printf("Uhrzeit in Millisekunden: %,d%n", ae.getWhen());

25 } // actionPerformed 26 } // BehandlerKlasse

27 // --- 28 // Ein Behandler-Objekt (mit Namen) vereinbaren:

29 private BehandlerKlasse behandlerObjekt = new BehandlerKlasse();

30 // --- 31 Grabo30(String ueberSchrift) {

32 super(ueberSchrift);

33 meinKnopf = new JButton("Knopf37");

34 // --- 35 // Jetzt wird das behandlerObjekt beim Knopf meinKnopf angemeldet:

36 meinKnopf.addActionListener(behandlerObjekt);

37 // Danach wird die Methode actionPerformed in diesem Behandler- 38 // Objekt jedesmal ausgefuehrt, wenn der Knopf ein Ereignis der 39 // Art actionPerformed erzeugt.

40 // --- 41 // Den Knopf in das Grabo30-Fenster einfuegen:

42 this.add(meinKnopf, "Center");

43

44 this.setDefaultCloseOperation(Grabo30.EXIT_ON_CLOSE);

45 this.setBounds(400, 200, 300, 100);

46 this.setVisible(true);

47 } // Konstruktor Grabo30

48 // --- 49 static public void main(String[] args) {

50 printf("Grabo30: Here we go!%n");

51 printf("---%n");

52 new Grabo30("Version mit Namen!");

53 printf("---%n");

54 printf("Grabo30: That's all!%n%n");

55 } // main

56 // --- 57 // Eine Methode mit einem kurzen Namen:

58 static void printf(String f, Object... v) {System.out.printf(f, v);}

59 // --- 60 } // class Grabo30

(3)

Beuth Hochschule Behandler-Klassen, -Objekte und -Methoden WS15/16, S. 3 In der Klasse Grabo30 wurde für den Knopf eine Behandler-Klasse und ein Behandler-Objekt vereinbart. In einem größeren Grabo-Programm mit zig oder hunderten von Knöpfen, Menüs etc. wäre es sehr lästig, für entsprechend viele Klassen und Objekte Namen zu erfinden. Das Programm

Grabo31 zeigt, wie man ein namenloses (anonymes) Behandler-Objekt einer namenlosen (anonymen) Behandler-Klasse bei einem Knopf anmelden kann:

1 // Datei Grabo31.java

2 /* --- 3 Ein Grabo31-Objekt ist ein Fenster (JFrame-Objekt) mit einem

4 Knopf (JButton-Objekt) darin. Wenn der Benutzer auf den Knopf klickt, 5 wird zur Standardausgabe ausgegeben, wie viele Millisekunden seit 6 Beginn des Tages 01.01.1970 vergangen sind.

7

8 In dieser Version wird ein anonymes Behandler-Objekt 9 einer anonymen Behandler-Klasse bei dem Knopf angmeldet.

10 Siehe auch Grabo30.java.

11 --- */

12 import javax.swing .JFrame;

13 import javax.swing .JButton;

14 import java .awt .event.ActionListener;

15 import java .awt .event.ActionEvent;

16

17 class Grabo31 extends JFrame {

18 // --- 19 private JButton meinKnopf;

20 // --- 21 Grabo31(String ueberSchrift) {

22 super(ueberSchrift);

23 meinKnopf = new JButton("Knopf37");

24 // --- 25 // Ein Behandler-Objekt ohne Namen ("ein anonymes Objekt")

26 // einer Behandler-Klasse ohne Namen ("einer anonymen Klasse") 27 // wird vereinbart und beim Knopf meinKnopf angemeldet.

28 // Danach wird die Methode actionPerformed in diesem Behandler- 29 // Objekt jedesmal ausgefuehrt, wenn der Knopf ein Ereignis der 30 // Art actionPerformed erzeugt.

31

32 meinKnopf.addActionListener(new ActionListener() { 33 @Override

34 public void actionPerformed(ActionEvent ae) {

35 // Das Objekt ae enthaelt Informationen ueber das Ereignis 36 printf("Uhrzeit in Millisekunden: %,d%n", ae.getWhen());

37 } // actionPerformed 38 });

39 // --- 40 // Den Knopf in das Grabo31-Fenster einfuegen:

41 this.add(meinKnopf,"Center");

42

43 this.setDefaultCloseOperation(Grabo31.EXIT_ON_CLOSE);

44 this.setBounds(400, 200, 300, 100);

45 this.setVisible(true);

46 } // Konstruktor Grabo31

47 // --- 48 static public void main(String[] args) {

49 printf("Grabo31: Here we go!%n");

50 printf("---%n");

51 new Grabo31("Version ohne Namen!");

52 printf("---%n");

53 printf("Grabo31: That's all!%n%n");

54 } // main

55 // --- 56 // Eine Methode mit einem kurzen Namen:

(4)

S. 4, WS15/16 Behandler-Klassen, -Objekte und -Methoden Beuth-Hochschule

57 static void printf(String f, Object... v) {System.out.printf(f, v);}

58 // --- 59 } // class Grabo31

Referenzen

ÄHNLICHE DOKUMENTE

noplastischen nachbildung in Wien sind Kopien des Maître Alpais Ziboriums im victoria and Albert Museum in Lon­. don, im Musée des Arts décoratifs in Paris und

Es wird diskutiert, inwiefern sich Farbstoffe als wissenschaftliches Objekt eignen und welche Erkenntnisse anhand einzelner Objekte und der gesamten Sammlung gewonnen werden

(Bemerkung: Die Herleitbarkeit von ∀x.P h¨ angt formal nicht vom speziellen x ab, da diese Variable als gebundene Variable beliebig umbenannt werden kann, so dass sie nicht in

Zwei XML Schemata heißen genau dann äquivalent, wenn die Mengen gültiger Dokumente, die von. beiden Schemata beschrieben werden,

• Weil Objekt-Methoden nur für von null verschiedene Objekte aufgerufen werden können, kann die leere Liste nicht mittels. toString() als String

• dient nur als Schablone für abgeleitete Klassen I abstrakte Klassen können nicht instanziert werden. • Compiler

Damit man beim Ausführen der Test-Klassen auch ein paar Fehlermeldungen sieht (obwohl es sehr schwer, vielleicht sogar unmöglich ist, noch Fehler in der Klasse StringBuilder

I know that there are still many aspects in JavaFX that could be and must be improved but for me, with the desk- top as the target platform, JavaFX is a big step forward compared