W ramach nauki javy chciałem stworzyć aplikację, która rysowałaby kreski w odpowiednie strony, wraz z naciśnięciem konkretnego przycisku. Niestety wynik moich starań nie jest zadowalający, w momencie naciśnięcia przycisku tworzy się kolejna ramka i przycisk umieszczony na dole ramki pojawia się również na górze (nie wiem jak to możliwe), a poza tym rysowany jest jedynie ostatni etap animacji czyli kropka zamiast całej linii. Proszę Was o jakieś podpowiedzi związane z błędami popełnionymi przeze mnie w poniższym (skróconym) kodzie.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Animacja3
{
JFrame ramka = new JFrame();
int x = 400;
int y = 200;
Color losowyKolor;
MojPanelRysunkowy MPR = new MojPanelRysunkowy();
public static void main ( String[] args)
{
Animacja3 Animka = new Animacja3();
Animka.postawieniePrzyciskow();
}
public void postawieniePrzyciskow()
{
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton przyciskPD = new JButton("Prawo-Dol");
przyciskPD.addActionListener(new PrzyciskPDListener());
ramka.getContentPane().add(BorderLayout.SOUTH, przyciskPD);
ramka.getContentPane().add(MPR);
ramka.setSize(800,600);
ramka.setVisible(true);
}
public void przesuwPD()
{
losowyKolor = rndKolor();
for (int i = 0; i < 5; i++)
{
x++;
y++;
MPR.repaint();
try
{
Thread.sleep(50);
}
catch (Exception ex){}
}
}
class MojPanelRysunkowy extends JPanel
{
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(losowyKolor);
g2d.fillOval(x,y,10,10);
}
}
public Color rndKolor()
{
int r = (int) (Math.random() * 256);
int g = (int) (Math.random() * 256);
int b = (int) (Math.random() * 256);
Color kolor = new Color(r,g,b);
return kolor;
}
class PrzyciskPDListener implements ActionListener
{
public void actionPerformed(ActionEvent zdarzenie)
{
przesuwPD();
}
}
}