Анимация в GUI - Java
Формулировка задачи:
Добрый день!
Подскажите пожалуйста, где ошибка и как подправить программу.(идея взята из книги HEAD First).
Первоначально - программа рисует круг где-то во фрейме и начинает двигать в заданном направлении по х, у. Пока идет цикл - работает, круг постепенно с заданной задержкой движется от начальной точки по одной точке, к точке назначения, когда весь код в методе гоу, и нет кнопки(button).
Решил немного подправить - добавил кнопку старт, которая должна запускать движение круга.
Работает, но теперь круг передвигается не плавно от точки к точке, а где-то внутри себя пропускает весь цикл и в итоге выбрасывает его уже в точке назначения - то-есть нет того плавного движения, которое было в первоначальной реализации программки.
Заранее благодарен за помощь
public class SimpleAnimation {
int x = 70;
int y = 70;
public static void main(String[] args) {
SimpleAnimation gui = new SimpleAnimation();
gui.go();
}
public void go(){
JFrame frame = new JFrame();
JButton button = new JButton("Start animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
button.addActionListener(new ButtonListener());
}
MyDrawPanel2 panel = new MyDrawPanel2();
public class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < 130; i++) {
x++;
y++;
panel.repaint();
try{
Thread.sleep(50);
}
catch(Exception e){
System.out.println("Error? Repair me!");
}
}
}
}
public class MyDrawPanel2 extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.green);
g.fillOval(x, y, 40, 40);
}
}
}Решение задачи: «Анимация в GUI»
textual
Листинг программы
public class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
Thread r = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 130; i++) {
x++;
y++;
panel.repaint();
try {
Thread.sleep(50);
} catch (Exception e) {
System.out.println("Error? Repair me!");
}
}
}
});
r.start();
}
}