Анимация в 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д