Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Heiden Armes Geändert vor über 10 Jahren
1
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe möglichst bald aus... Event kann irgendwo auftreten
2
Learning By Doing TimerEvent (UML-Diagramm) im Delegations-Eventmodell Implementierung der Callbackmethode Zur Registrierung der Callbackmethode Registrierung der Callbackmethode timeElapsed() existiert! Garantieerklärung: timerListener.timeElapsed() Event! Aufruf von Registrierung: Übergeben einer Referenz der Klasse, welche die Callbackmethode enthält, an den Eventhandler, der die Callbackmethode bei jedem Event aufruft.
3
Learning By Doing // DigitalWatch.java import ch.aplu.util.*; import java.awt.Font; public class DigitalWatch implements TimerListener { private int seconds = 0; private boolean isBell = true; private LoResAlarmTimer timer = new LoResAlarmTimer(1000000L); private GPanel panel = new GPanel(); public DigitalWatch() { panel.font(new Font( "Arial", Font.PLAIN, 200)); timer.addTimerListener(this); while (true) { if (isBell) { isBell = false; panel.clear(); panel.text(0.3, 0.4, Integer.toString(seconds)); seconds++; } public boolean timeElapsed() { isBell = true; return true; } public static void main(String[] args) { new DigitalWatch(); } DigitalWatch while (true) { if (isBell) { isBell = false; panel.clear(); panel.text(0.3, 0.4, Integer.toString(seconds)); seconds++; } CallbackmethodeEventloop Registrierung "Dieser TimerListener wird beim Eventhandler registriert" Implementierung "DigitalWatch implementiert einen TimerListener"
4
Learning By Doing // WbzEx11.java import java.awt.event.*; import java.awt.Color; import ch.aplu.util.*; public class WbzEx11 { class MyMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent evt) { Color c = new Color((float)Math.random(), (float)Math.random(), (float)Math.random()); Stern stern = new Stern(p, 50, c); stern.moveAt((int)p.toWindowX(evt.getX()), (int)p.toWindowY(evt.getY())); stern.showMe(); } private GPanel p = new GPanel(0, 500, 0, 500); public WbzEx11() { p.addMouseListener(new MyMouseAdapter()); } public static void main(String[] args) { new WbzEx11(); } MouseEvents Mausevents Registrie- rung Innere Klasse Callbackmethode hat Zugriff
5
Learning By Doing // WbzEx11a.java import java.awt.event.*; import java.awt.Color; import ch.aplu.util.*; public class WbzEx11a { private GPanel p = new GPanel(0, 500, 0, 500); public WbzEx11a() { p.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { Color c = new Color((float)Math.random(), (float)Math.random(), (float)Math.random()); Stern stern = new Stern(p, 50, c); stern.moveAt((int)p.toWindowX(evt.getX()), (int)p.toWindowY(evt.getY())); stern.showMe(); } }); } public static void main(String[] args) { new WbzEx11a(); } Anonyme Klassen Registrierung Anonyme Klasse abgeleitet von MouseAdapter
6
Learning By Doing // WbzEx12.java import java.awt.event.*; import javax.swing.*; import ch.aplu.turtle.*; public class WbzEx12 { private class ButtonActionAdapter implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == runButton) state = States.RUNNING; if (source == stopButton) state = States.STOPPED; if (source == quitButton) state = States.QUITTING; } private enum States {STOPPED, RUNNING, QUITTING}; private States state = States.STOPPED; private JButton runButton = new JButton("Run"); private JButton stopButton = new JButton("Stop"); private JButton quitButton = new JButton("Quit"); ButtonEvents Buttonevents Zustände (Aufzählungstyp) Innere Klasse, implementiert ActionListener aktueller Zustand Instanzvariablen State switch
7
Learning By Doing ButtonEvents Buttonevents public WbzEx12() { Turtle t = new Turtle(); JPanel jp = t.getPlayground(); jp.add(runButton); jp.add(stopButton); jp.add(quitButton); jp.validate(); ButtonActionAdapter adapter = new ButtonActionAdapter(); runButton.addActionListener(adapter); stopButton.addActionListener(adapter); quitButton.addActionListener(adapter); while (state != States.QUITTING) { switch(state) { case STOPPED: Thread.yield(); break; case RUNNING: t.forward(10).left(10); break; } System.exit(0); } public static void main(String[] args) { new WbzEx12(); } Event loop Buttons in der Komponente anzeigen Registrierung Prozessor freiwillig anderen abgeben
8
Learning By Doing ButtonEvents Buttonevents // WbzEx12a.java import java.awt.event.*; import javax.swing.*; import ch.aplu.turtle.*; public class WbzEx12a { interface State { int QUITTING = 0; int STOPPED = 1; int RUNNING = 2; } private class ButtonActionAdapter implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == runButton) state = State.RUNNING; if (source == stopButton) state = State.STOPPED; if (source == quitButton) state = State.QUITTING; } private int state = State.STOPPED; private JButton runButton = new JButton("Run"); private JButton stopButton = new JButton("Stop"); private JButton quitButton = new JButton("Quit"); (J2SE 1.4) Simulation des Enum-Typs state-Variable als "dekorierter" int Verwendung durch Vorstellen des Interface-Bezeichners Schon viel besser als state = 2
9
Learning By Doing ButtonEvents Buttonevents public WbzEx12a() { Turtle t = new Turtle(); JPanel jp = t.getPlayground(); jp.add(runButton); jp.add(stopButton); jp.add(quitButton); jp.validate(); ButtonActionAdapter adapter = new ButtonActionAdapter(); runButton.addActionListener(adapter); stopButton.addActionListener(adapter); quitButton.addActionListener(adapter); while (state != State.QUITTING) { switch(state) { case State.STOPPED: Thread.yield(); break; case State.RUNNING: t.forward(10).left(10); break; } System.exit(0); } public static void main(String[] args) { new WbzEx12a(); } (J2SE 1.4) Verwendung durch Vorstellen des Interface-Bezeichners
10
Learning By Doing GUI Muster GUI-Muster // WbzEx13.java import java.awt.*; import javax.swing.*; import ch.aplu.util.*; public class WbzEx13 extends JPanel { private int count = 0; public WbzEx13() { JFrame f = new JFrame("Frame Window"); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(this); f.setBounds(50, 50, 550, 550); f.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawOval(0, 0, 500, 500); g.drawString("WBZ-Kurs \"Java im Unterricht\"", 180, 250); Graphics2D g2D = (Graphics2D)g; g2D.setStroke(new BasicStroke(8)); Line2D.Double line = new Line2D.Double(20, 300, 480, 300); g2D.draw(line); System.out.println(count++); } public static void main(String[] args) { Console.init(); new WbzEx13(); } JPanel als Grafik-Fenster paintComponent() wird bei jedem System-Trigger aufgerufen JFrame als umfassendes Fenster Aktion beim Klicken des Close-Buttons Füge das JPanel in das JFrame Position und Grösse des JFrames Zeige das JFrame mit Inhalt Aufruf überschr. Methode aus JPanel Zeichnen mit dem Graphics-Context Hole Graphics2D-Context Text als Grafik Indikator für Aufruf von paintComponent Neue Linieneigenschaft (Dicke) Linie als Objekt Zeichne Grafikobjket
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.