Prosta animacja z zastosowaniem wątków

0

Witam, jestem początkującym w tej dziedzinie dlatego proszę o pomoc - nie wiem co zrobić, aby nasrysowany prostokąt przesuwał się o 1 piksel co 1 sekundę. Z góry bardzo dziękuję, proszę o szybką odpowiedź i oczywiście życzę wesołych świąt. Oto trochę pokręcony kod, który jak dotąd wyprodukowałem:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;


class Timer extends Thread{
    Timer (){}
    public void run() {
       int time=0;
       Animacje anim = new Animacje();
       while (true) {
           try{this.sleep(1000);} catch (InterruptedException exc){return;}
           time++;
           anim.przepisz(time);
	   //System.out.println(time);
	   anim.repaint();
       }
    }
}


public class Obrazpr2 extends Frame {


public static void main (String [] args) {


    Frame okno = new Frame("Okno");
    okno.add( new Animacje() );

    okno.setSize(800,800);
    okno.setVisible(true);

    Timer tm = new Timer();
    tm.start();

okno.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Koniec programu");
System.exit(0);
}
});
okno.setVisible(true);
}
}


class Animacje extends Canvas {
public int i;
public void przepisz(int j) {
i=j;
}

public void paint(Graphics g) {
   g.setColor(Color.black);
   g.drawRect(200+i*10,400,25,5);
 }
}
0

Teraz zadaj sobie pytanie: Co ma wspolnego obiekt anim z watku z obiektem typu Animacje z obiektu okna?

0

Johny ma racje: dodaj po prostu ten utworzony obiekt anim do okna bo on nie ma gdzie(na czym) tego rysowac reszta wygląda w porządku [browar]

0

Dzięki Wam bardzo za podpowiedzi, ale nadal nie działa mi tak jak chcę. Na pewno źle go dodaję, słabo jeszcze się na tym znam. Moglibyście zmienić mój kod tak aby to działało, byłbym bardzo wdzięczny.
Pozdrawiam.

0

ok poprawie ci to ale byc moze wieczorem sie pojawi bo nie wiem czy bede mial teraz czas

0

Musisz po prostu uzyc tego samego obiektu, najlepiej przekazac do watku jako parametr.


//main
    Animacje anim = new Animacje();
    okno.add( anim );

    okno.setSize(800,800);
    okno.setVisible(true);

    Timer tm = new Timer(anim);
    tm.start();
//...

class Timer extends Thread{
    private Animacje anim;
    Timer (Animacje anim)
    {
      this.anim = anim;
    }
    public void run() {
       int time=0;
       while (true) {
           try{this.sleep(1000);} catch (InterruptedException exc){return;}
           time++;
           anim.przepisz(time);
           //System.out.println(time);
           anim.repaint();
       }
    }
}
0

Jeszcze raz bardzo dziękuję za pomoc i za chęci.
Już wszystko dobrze działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1