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

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

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

Всем привет, как можно переделать нижеприведённый код чтобы анимация срабатывала не при старте программы а при нажатии кнопки?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class JavaApplication12 {
    JButton button;
    JFrame frame;
    int x = 70;
    int y = 70;

    public static void main(String[] args) {
        JavaApplication12 gui = new JavaApplication12();
        gui.go();
    }

    class MyDrawPanel extends JPanel  { 
    @Override
    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) ; 

    }       
 
    }

    public void go(){
        frame = new JFrame();
        
        MyDrawPanel drawPanel = new MyDrawPanel(); 
        frame.getContentPane().add(drawPanel);
 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
        frame.setSize(300,300);
        frame.setVisible(true);
        
        for(int i=0; i<130; i++){
            x++;
            y++;
            
            drawPanel.repaint();
            try{
                Thread.sleep(50);
            }catch(Exception ex){ }
        }
    }

}
Покажите как это можно сделать?
У меня вот что получилось но это определённо не то!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JavaApplication12 {
    JButton button;
    JFrame frame;
    int x = 70;
    int y = 70;

    public static void main(String[] args) {
        JavaApplication12 gui = new JavaApplication12();
        gui.go();
    }

    class MyDrawPanel extends JPanel implements ActionListener { 
    @Override
    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) ; 
 
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        for(int i=0; i<130; i++){
            x++;
            y++;
            
            this.repaint();
            try{
                Thread.sleep(50);
            }catch(Exception ex){ }
        }
        
    }

    }

    public void go(){
        frame = new JFrame();
     
        button = new JButton("Click me");
        
        MyDrawPanel drawPanel = new MyDrawPanel(); 
        frame.getContentPane().add(drawPanel);
        button.addActionListener(drawPanel);
        
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(button, BorderLayout.SOUTH);
 
        frame.setSize(300,300);
        frame.setVisible(true);
        
        }
    }
}

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

textual
Листинг программы
@Override                                   
public void actionPerformed(ActionEvent e) {
    new Thread(() -> {                      
        for (int i = 0; i < 130; i++) {     
            x++;                            
            y++;                            
                                            
            this.repaint();                 
            try {                           
                Thread.sleep(50);           
            } catch (Exception ex) {        
            }                               
        }                                   
    }).start();                             
}

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы