Старт анимации не при старте программы, а при нажатии кнопки - 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();
}