Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe 1.

Ähnliche Präsentationen


Präsentation zum Thema: "AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe 1."—  Präsentation transkript:

1 AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe 1 soll sich der Wagen, wenn er am rechten Rand ankommt, wieder von links nach rechts bewegen. AUFGABE 3: Zusätzlich zu Aufgabe 2 soll jedesmal beim Anklicken des Buttos "schneller" der Wagen schneller fahren.

2 AUFGABE: Ein Wagen (dargestellt durch ein Rechteck) soll sich immer wieder von links nach rechts bewegen. Zusätzlich soll jedesmal beim Anklicken des Buttos "schneller" der Wagen schneller fahren. Außerdem muß das Entwurfsmuster MVC benutzt werden. Hier das UML...

3 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen schwarzer Pfeil: Assoziation roter, gestrichelter geschwungener Pfeil: zeigt vom Ereignis (fire) zur Wanze (Lauscher)

4 AnimationController - animationView : AnimationView - animationModel : AnimationModel Anwender feuert in der View. Einfangende Methode im Controller verändert Daten im Model Model feuert (weil Daten im Model geändert wurden). Einfangende Methode in der View veranlaßt Bildschirmausgabe. Timer feuert im Controller. Einfangende Methode im Controller verändert Daten im Model. AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen

5 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen Wie siehe eine Kette der Informationsverarbeitung aus, d.h: Wer beginnt zu feuern ? Welche Wanzen treten dann in Aktion und auf welche Daten greifen diese dann zu? Es gibt zwei Möglichkeiten, von denen gefeuert werden kann:

6 1. Möglichkeit: View feuert

7 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen Button "schneller" wird betätigt --> Feuer Einfangende Methode des Controllers verändert die Daten ("schrittweite") des Model, also Zugriff auf Model, also... --> Feuer Einfangende Methode der View greift auf die Daten (" schrittweite ") des Model zu (für Bildschirmausgabe).

8 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen II) View feuert (nochmals zusammengefasst): Durch das Klicken des Buttons "schneller" wird Feuer ausgelöst. Dadurch wird in der einfangenden Methode des Controllers die Daten (das Attribut "wagen", also Schrittweite beim Bewegen) im Model geändert (Wagen fährt schneller). Diese Änderung veranlaßt das Model zu feuern. Dadurch wird in der einfangenden Methode der View die Daten (das Attribut "wagen", also Schrittweite beim Bewegen) des Models ausgelesen und auf dem Bildschirm ausgegeben (Anwender sieht wie der Wagen schneller fährt).

9 2. Möglichkeit: Timer feuert

10 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen Timer feuert --> Feuer Einfangende Methode des Controllers verändert die Daten (Koordinaten) des Model, also Zugriff auf Model, also... --> Feuer Einfangende Methode der View greift auf die Daten (" schrittweite ") des Model zu (für Bildschirmausgabe).

11 AnimationController - animationView : AnimationView - animationModel : AnimationModel AnimationView - animationModel : AnimationModel AnimationModel - Wagen : wagen I) Timer feuert (nochmals zusammengefasst): Dadurch wird in der einfangenden Methode des Controllers die Daten (das Attribut "wagen") im Model geändert (Wagen fährt). Diese Änderung veranlaßt das Model zu feuern. Dadurch wird in der einfangenden Methode der View die Daten (das Attribut "wagen") des Models ausgelesen und auf dem Bildschirm ausgegeben (Anwender sieht wie der Wagen fährt).

12 Implementieren Sie - soweit dies mit Ihrem bisherigen Wissen möglich ist - M, V und C der obigen Animation (zuerst ohne den Button "schneller". Danach mit dem Button "schneller". Beachten Sie...

13 Der Button schneller soll unten (South) im Border- Layout angebracht werden. Die Bewegungen des Wagens müssen im Center Border-Layout angebracht werden

14 Border-Layout: NORTH SOUTH WEST EAST CENTER

15 In der folgenden Implementierung wird (aus Gründen der Vereinfachung) noch nicht das Border-Layout verwendet.

16 package wagenanimationmvc11; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import java.util.Observer; import javax.swing.*; public class MainWagenAnimationMVC11 { public static void main(String[] args){ AnimationController animationController = new AnimationController(); }

17 package wagenanimationmvc11; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; class AnimationController { private AnimationView animationView; private AnimationModel animationModel; public AnimationController() { Timer timer; animationModel = new AnimationModel(); animationView = new AnimationView(animationModel); TimerActionListener tal; tal=new TimerActionListener(animationModel); timer = new Timer(2,tal); timer.start(); } public AnimationView getAnimationView() { return animationView; }

18 class TimerActionListener implements ActionListener { private AnimationModel animationModel; public TimerActionListener(AnimationModel animationModel){ this.animationModel=animationModel; } public void actionPerformed(ActionEvent ae) { animationModel.updaten(); }

19 package wagenanimationmvc11; import java.awt.Color; import java.awt.Graphics; class AnimationJPanel extends javax.swing.JPanel { private Wagen wagen; public void setWagen(Wagen wagen){ this.wagen=wagen; } public AnimationJPanel(Wagen wagen) { this.wagen=wagen; } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.red); g.fillRect(wagen.getX(), wagen.getY(), 30, 25); }

20 package wagenanimationmvc11; import java.util.Observable; class AnimationModel extends Observable{ private Wagen wagen; public Wagen getWagen(){ return wagen; } public void updaten() { wagen.fahren(); setChanged(); notifyObservers(); } public AnimationModel() { wagen=new Wagen(); }

21 package wagenanimationmvc11; import java.awt.Container; import java.util.Observable; import java.util.Observer; import javax.swing.JFrame; class AnimationView extends javax.swing.JFrame implements Observer{ private AnimationJPanel animationJPanel; private AnimationModel animationModel; public AnimationView(AnimationModel animationModel) { Container mycont; this.animationModel = animationModel; this.animationModel.addObserver(this); mycont = getContentPane(); this.setSize(500,500); animationJPanel = new AnimationJPanel(animationModel.getWagen()); mycont.add(animationJPanel); this.setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

22 public AnimationJPanel getAnimationJPanel(){ return animationJPanel; } public void update(Observable m, Object o) { if (m == animationModel) { animationJPanel.repaint(); }

23 package wagenanimationmvc11; class Wagen{ private int x; private int y; private int schritt; public Wagen(){ x=0; y=0; schritt = 1; } public void setX(int pX){ x = pX; } public int getX(){ return x; }

24 public void setY(int pY){ y = pY; } public int getY(){ return y; } void fahren(){ if(x <= 400){ x = x + schritt; } else{ x=0; } void setSchritt(int pSchritt){ schritt = pSchritt; }


Herunterladen ppt "AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe 1."

Ähnliche Präsentationen


Google-Anzeigen