Siemka.

mam taki oto kod:

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class Kolo extends Thread {
	
	private int x = 0;
	private int y = 0;
	private int promien;
	private Color kolor = Color.black;
	private int a; 
	
	public Kolo()
	{
		Random los = new Random();
		promien = los.nextInt(50) + 22;
		
		a = los.nextInt(5);
		if (a == 1)
		{
			kolor = Color.red;
		}
		if (a == 2)
		{
			kolor = Color.green;
		}
		if (a == 3)
		{
			kolor = Color.blue;
		}
		if(a == 4)
		{
			kolor = Color.orange;
		}
		if (a == 5)
		{
			kolor = Color.gray.darker();
		}
		
		System.out.println("Promień: " + promien + "\n" +
				"Kolor: " + kolor.toString() + "\n" +
				"a: " + a);
		
	}
	
	public void run() 
	{
		System.out.println("Tworzę nowe koło");
		Kolo k = new Kolo();
		for (a = 1; a <= 5; a++)
		{
			try
			{
				k.animation(this);
				sleep(80);
			}
			catch(InterruptedException e) {}
		}
	}
	
	public void animation(Kolo k)
	{
		System.out.println("Wykonuję animację.\n" +
				"x = " + x + ", y = " + y);
		k.x = x + 1;
		k.y = y + 1;
	}
	
	synchronized public void paint(Graphics g)
	{
		g.setColor(this.kolor);
		g.fillOval(this.x, this.y, this.promien, this.promien);
		g.setColor(this.kolor.darker());
		g.drawOval(this.x, this.y, this.promien - 1, this.promien - 1);
	}

	public int getX()
	{
		return this.x;
	}
	
	public int getY()
	{
		return this.y;
	}
	
	public void setX(int x)
	{
		this.x = x;
	}
	
	public void setY(int y)
	{
		this.y = y;
	}
}

Gdzieś tam w innej klasie mam sobie ramkę która mi to wszystko wyświetla.

Szukam pomocy w temacie stworzenia z tego małej animacji i mam kilka pytań:

  1. Czy tworzenie animacji na zasadzie "pętla + medota" (patrz metoda run()) jest prawidłowym zachowaniem?
  2. Czy jest potrzebna tutaj metoda paint() ? Czy może należy zastosować paintComponent() na poziomie ramki?
  3. Chciałbym w metodzie animation() wymusić repaint() ale nie mam do tego obiektu Graphics - podejżewam że musiałbym go gdzieś stworzyć - jak i gdzie to zrobić? Czy moje Kolo musi dziedziczyć Panel/JPanel czy jest na to jakiś inny sposób?
  4. W sieci znalazłem kod w którym każdy element animacji posiada własny JPanel - następnie wszystkie te panele są dodawane do kontenera który z kolei dołączany jest do ramki. Czy takie kodowanie jest "z zasady" poprawne?

Z góry dzięki za naprowadzanie na właściwy tor.