Анимация в GUI - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день! Подскажите пожалуйста, где ошибка и как подправить программу.(идея взята из книги HEAD First). Первоначально - программа рисует круг где-то во фрейме и начинает двигать в заданном направлении по х, у. Пока идет цикл - работает, круг постепенно с заданной задержкой движется от начальной точки по одной точке, к точке назначения, когда весь код в методе гоу, и нет кнопки(button). Решил немного подправить - добавил кнопку старт, которая должна запускать движение круга. Работает, но теперь круг передвигается не плавно от точки к точке, а где-то внутри себя пропускает весь цикл и в итоге выбрасывает его уже в точке назначения - то-есть нет того плавного движения, которое было в первоначальной реализации программки. Заранее благодарен за помощь
Листинг программы
  1. public class SimpleAnimation {
  2.  
  3. int x = 70;
  4. int y = 70;
  5. public static void main(String[] args) {
  6. SimpleAnimation gui = new SimpleAnimation();
  7. gui.go();
  8. }
  9. public void go(){
  10. JFrame frame = new JFrame();
  11. JButton button = new JButton("Start animation");
  12. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  13. frame.getContentPane().add(BorderLayout.SOUTH, button);
  14.  
  15. frame.getContentPane().add(panel);
  16. frame.setSize(300, 300);
  17. frame.setVisible(true);
  18. button.addActionListener(new ButtonListener());
  19. }
  20. MyDrawPanel2 panel = new MyDrawPanel2();
  21. public class ButtonListener implements ActionListener{
  22. @Override
  23. public void actionPerformed(ActionEvent arg0) {
  24. for (int i = 0; i < 130; i++) {
  25. x++;
  26. y++;
  27. panel.repaint();
  28. try{
  29. Thread.sleep(50);
  30. }
  31. catch(Exception e){
  32. System.out.println("Error? Repair me!");
  33. }
  34. }
  35. }
  36. }
  37. public class MyDrawPanel2 extends JPanel{
  38. public void paintComponent(Graphics g){
  39. g.setColor(Color.WHITE);
  40. g.fillRect(0, 0, this.getWidth(), this.getHeight());
  41. g.setColor(Color.green);
  42. g.fillOval(x, y, 40, 40);
  43. }
  44. }
  45. }

Решение задачи: «Анимация в GUI»

textual
Листинг программы
  1. public class ButtonListener implements ActionListener{
  2.  
  3.         @Override
  4.         public void actionPerformed(ActionEvent arg0) {
  5.             Thread r = new Thread(new Runnable() {
  6.                 @Override
  7.                 public void run() {
  8.                     for (int i = 0; i < 130; i++) {
  9.  
  10.                         x++;
  11.                         y++;
  12.  
  13.                         panel.repaint();
  14.                         try {
  15.                             Thread.sleep(50);
  16.                         } catch (Exception e) {
  17.                             System.out.println("Error? Repair me!");
  18.                         }
  19.                     }
  20.                 }
  21.             });
  22.  
  23.             r.start();
  24.         }
  25.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут