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ń:
- Czy tworzenie animacji na zasadzie "pętla + medota" (patrz metoda run()) jest prawidłowym zachowaniem?
- Czy jest potrzebna tutaj metoda paint() ? Czy może należy zastosować paintComponent() na poziomie ramki?
- 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?
- 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.