24
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.

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

Embed Size (px)

Citation preview

Page 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

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.

Page 2: 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

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 ...

Page 3: 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

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)

Page 4: 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

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

Page 5: 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

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:

Page 6: 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

1. Möglichkeit: View feuert

Page 7: 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

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).

Page 8: 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

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).

Page 9: 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

2. Möglichkeit:Timer feuert

Page 10: 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

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).

Page 11: 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

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).

Page 12: 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

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 ...

Page 13: 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

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

Page 14: 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

Border-Layout:

NORTH

SOUTH

WEST

EAST

CENTER

Page 15: 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

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

Page 16: 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

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(); }}

Page 17: 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

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; }}

Page 18: 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

class TimerActionListener implements ActionListener { private AnimationModel animationModel;

public TimerActionListener(AnimationModel animationModel){ this.animationModel=animationModel; } public void actionPerformed(ActionEvent ae) { animationModel.updaten(); }}

Page 19: 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

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); }}

Page 20: 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

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(); }}

Page 21: 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

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); }

Page 22: 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

public AnimationJPanel getAnimationJPanel(){ return animationJPanel; }

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

Page 23: 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

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; }

Page 24: 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

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; }}