Я пытаюсь оживить 50 прыгающих точек разными цветами. Я могу заставить точки двигаться, но точки тянутся так, как будто их рисуют. Я не знаю, почему так получилось
Это мои коды для DotsPanel:
public DotsPanel(){
frameSize = 300;
setBounds (100, 100,frameSize,frameSize );
setPreferredSize (new Dimension(frameSize, frameSize));
setVisible(true);
x = 0;
y = 40;
moveX = moveY = 3;
for (int i = 0; i < dot.length; i++)
{
dot[i] = new Dot (frameSize, frameSize);
}
timer = new Timer(DELAY, new TimerListener());
timer.start();
}
private class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < dot.length; i++)
{
dot[i].animate();
}
repaint();
}
}
public void paintComponent(Graphics g){
for (int i = 0; i < dot.length; i++)
{
dot[i].draw(g);
}
}
public void run ()
{
while(true)
{
for (int i = 0; i < dot.length; i++)
{
dot[i].animate();
}
repaint();
}
}
Это класс Dot:
public Dot(int width, int height) {
this.width = width;
this.height = height;
x = r.nextInt(width - d);
y = r.nextInt(height - d);
speed = r.nextInt(10);
red = r.nextInt(256);
green = r.nextInt(256);
blue = r.nextInt(256);
moveX = moveY = 3;
}
public void animate ()
{
x += moveX;
y += moveY;
if (x <= 0 || x >= 300)
moveX = moveX * -1;
if (y <= 0 || y >= 300)
moveY = moveY * -1;
}
public void draw(Graphics g) {
g.setColor(new Color(red, green, blue));
//g.setColor(Color.BLUE);
g.fillOval(x, y, d, d);
}
Я не знаю, какая часть пошла не так. Я предполагаю, что это метод ничьей. Я попытался использовать краску вместо paintComponent, но результат все тот же. И если я удаляю цикл while, точки не анимируются, я сделал это в соответствии с учебником, который я видел в youtube, хотя учебник работает хорошо.