# Applet+Timer



## Phobos (14. Jun 2005)

Hi. Ich hab folgendes Problem: Ich will in einem Applet Punkte zeichnen lassen, die sich mit der Zeit bewegen. Kann ich das mit einem Timer machen, der jede Sekunde was neues zeichnet? Und wenn ja, wie mach ich das?
Das Grundgerüst sieht ja so aus:

```
import java.awt.*;
import java.util.*;

public class XYZ extends java.applet.Applet {
     
    public void init() {
       
    }   
    
    public void paint(Graphics g)
    {
        HIER SOLL GEZEICHNET WERDEN        
    }
    
}
```

Wo müsste ich denn da was einfügen/ändern?


----------



## Sky (14. Jun 2005)

1.) Du brauchst (eine) Instanzvariable(n), aus der hervorgeht, wo deine Punkte liegen

2.) Du brauchst einen Timer und eine TimerTask, welche diese Punkte ändern und den Mal-Vorgang anstossen

3.) Du musst in deiner paint (besser wäre auf einem Canvas) anhand deiner Instanzvariable(n) die Punkte zeichnen


----------



## Guest (15. Jun 2005)

kannst du mir da nen codescnipsel geben wie ich das machen könnte? oder nen link mit beispiel?
für den timer und dass was er machen soll brauche ich doch folgenden code:

```
class Task extends TimerTask
{
  public void run()
  {
    HIER KOMMT REIN WAS GEMACHT WERDEN SOLL
  }
}
```
dann muss ich ein Timer-Objekt erzeugen:

```
Timer timer = new Timer();
 // nach 2 Sek geht's los
 timer.schedule( new Task(), 2000 );
 // nach 1 Sek geht's los und dann alle 5 Sekunden
 timer.schedule( new Task(), 1000, 5000 );
```

aber wie bekomme ich das was in meiner paint steht in die run-methode rein?


----------



## Sky (15. Jun 2005)

Du warst doch schon fast fertig... trau dich doch einfach mal ran und mach weiter; so könnte es aussehen:

```
class XYZ extends java.applet.Applet {

  // 2 Punkte für eine Linie
  private Point p1;
  private Point p2;

  public void init() {
    // Initial liegen beide Punkte auf (0/0)
    setPoints(new Point(0,0), new Point(0,0));
    java.util.Timer timer = new java.util.Timer();
    timer.schedule( new Task(this), 0, 100 );
  }

  public void setPoints(Point newP1, Point newP2) {
    // Punkte neu setzen
    this.p1 = newP1;
    this.p2 = newP2;
    // neu malen
    this.repaint();
  }

  public void paint(Graphics g) {
    super.paint(g);
    // anhand der 2 Punkte eine Linie malen
    g.drawLine(p1.x, p1.y, p2.x, p2.y);
  }

}

class Task extends TimerTask {
  
  // Referenz auf das Applet
  private XYZ theInstance;
  
  // Dummy-Werte fuer einen 2. Punkt
  private int x;
  private int y;

  public Task( XYZ instance ) {
    theInstance = instance;
  }

  public void run() {
    // setzen der Punkte im Applet: Punkt1 ist immer (0/0)
    // Punkt2 verschiebt sich immer um eins in x- und y-Richtung
    theInstance.setPoints(new Point(0,0), new Point(x++,y++));
  }
}
```


----------



## Phobos (15. Jun 2005)

Es Klappt! Danke für die schnelle Hilfe!


----------

