Старт анимации не при старте программы, а при нажатии кнопки - Java

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

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

Всем привет, как можно переделать нижеприведённый код чтобы анимация срабатывала не при старте программы а при нажатии кнопки?
Листинг программы
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class JavaApplication12 {
  5. JButton button;
  6. JFrame frame;
  7. int x = 70;
  8. int y = 70;
  9.  
  10. public static void main(String[] args) {
  11. JavaApplication12 gui = new JavaApplication12();
  12. gui.go();
  13. }
  14.  
  15. class MyDrawPanel extends JPanel {
  16. @Override
  17. public void paintComponent(Graphics g){
  18. g.setColor(Color.white);
  19. g.fillRect(0,0, this.getWidth(), this.getHeight());
  20. g.setColor(Color.green);
  21. g.fillOval(x,y,40,40) ;
  22.  
  23. }
  24. }
  25.  
  26. public void go(){
  27. frame = new JFrame();
  28. MyDrawPanel drawPanel = new MyDrawPanel();
  29. frame.getContentPane().add(drawPanel);
  30. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  31. frame.setSize(300,300);
  32. frame.setVisible(true);
  33. for(int i=0; i<130; i++){
  34. x++;
  35. y++;
  36. drawPanel.repaint();
  37. try{
  38. Thread.sleep(50);
  39. }catch(Exception ex){ }
  40. }
  41. }
  42.  
  43. }
Покажите как это можно сделать?
У меня вот что получилось но это определённо не то!
Листинг программы
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4.  
  5. public class JavaApplication12 {
  6. JButton button;
  7. JFrame frame;
  8. int x = 70;
  9. int y = 70;
  10.  
  11. public static void main(String[] args) {
  12. JavaApplication12 gui = new JavaApplication12();
  13. gui.go();
  14. }
  15.  
  16. class MyDrawPanel extends JPanel implements ActionListener {
  17. @Override
  18. public void paintComponent(Graphics g){
  19. g.setColor(Color.white);
  20. g.fillRect(0,0, this.getWidth(), this.getHeight());
  21. g.setColor(Color.green);
  22. g.fillOval(x,y,40,40) ;
  23. }
  24.  
  25. @Override
  26. public void actionPerformed(ActionEvent e) {
  27. for(int i=0; i<130; i++){
  28. x++;
  29. y++;
  30. this.repaint();
  31. try{
  32. Thread.sleep(50);
  33. }catch(Exception ex){ }
  34. }
  35. }
  36.  
  37. }
  38.  
  39. public void go(){
  40. frame = new JFrame();
  41. button = new JButton("Click me");
  42. MyDrawPanel drawPanel = new MyDrawPanel();
  43. frame.getContentPane().add(drawPanel);
  44. button.addActionListener(drawPanel);
  45. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  46. frame.getContentPane().add(button, BorderLayout.SOUTH);
  47. frame.setSize(300,300);
  48. frame.setVisible(true);
  49. }
  50. }
  51. }

Решение задачи: «Старт анимации не при старте программы, а при нажатии кнопки»

textual
Листинг программы
  1. @Override                                  
  2. public void actionPerformed(ActionEvent e) {
  3.     new Thread(() -> {                      
  4.         for (int i = 0; i < 130; i++) {    
  5.             x++;                            
  6.             y++;                            
  7.                                            
  8.             this.repaint();                
  9.             try {                          
  10.                 Thread.sleep(50);          
  11.             } catch (Exception ex) {        
  12.             }                              
  13.         }                                  
  14.     }).start();                            
  15. }

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


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

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

6   голосов , оценка 4.167 из 5

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

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

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