Кнопка "СТОП" - Java
Формулировка задачи:
Нужна помощь, нужно придумать кнопку стоп чтобы все шарики остановились, у меня не получается
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class prakticna4 extends JFrame {
JPanel panel = new JPanel();
Graphics g;
JButton btn = new JButton("Добавить шарик");
JButton btt = new JButton("Cтоп");
int i;
public prakticna4() {
setBounds(100, 200, 270, 350);
Container contentPane = getContentPane();
contentPane.setLayout(null);
btn.setBounds(630, 10, 160, 20);
btt.setBounds(910, 200, 70, 50);
contentPane.add(btn);
contentPane.add(btt);
panel.setBounds(500, 40, 400, 400);
panel.setBackground(Color.ORANGE);
contentPane.add(panel);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
new BallThread(panel).start();
i++;
repaint();
}
});
}
public static void main(String[] args) {
prakticna4 frame = new prakticna4();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void paint(Graphics g){
super.paint(g);
g.drawString("Количество шариков: " + i, 640, 500);
}
}
class BallThread extends Thread {
JPanel panel;
private int posX, posY;
private final int BALL_SIZE = 35;
private double alpha;
private int SPEED = 3;
BallThread(JPanel p) {
this.panel = p;
//задание начальной позиции и направления шарика
posX = (int)((panel.getWidth()-BALL_SIZE)* Math.random());
posY = (int)((panel.getHeight()-BALL_SIZE)* Math.random());
alpha = Math.random() * 10;
}
public void run() {
while(true) {
posX += (int)(SPEED * Math.cos(alpha));
posY += (int)(SPEED * Math.sin(alpha));
//вычисление угла отражения
if( posX >= panel.getWidth()-BALL_SIZE )
alpha = alpha + Math.PI-5*alpha;
else if( posX <= 0 )
alpha = Math.PI-alpha;
if( posY >= panel.getHeight()- BALL_SIZE )
alpha = -alpha;
else if( posY <= 0 )
alpha = -alpha;
paint(panel.getGraphics());
}
}
public void paint(Graphics g) {
//прорисовка шарика
g.setColor(Color.BLUE);
g.fillArc(posX, posY, BALL_SIZE, BALL_SIZE, 0, 360);
g.setColor(Color.WHITE);
g.drawArc(posX + 1, posY + 1, BALL_SIZE,BALL_SIZE, 120, 30);
try {
sleep(15);
}
catch(InterruptedException e) {
e.printStackTrace();
}
//удаление шарика
g.setColor(panel.getBackground());
g.fillArc(posX, posY, BALL_SIZE, BALL_SIZE, 0, 360);
}
}Решение задачи: «Кнопка "СТОП"»
textual
Листинг программы
class BallThread extends Thread {
...
private static int SPEED = 0;//Сделать поле скорость статичным
public static void setSPEED(int SPEED) {
BallThread.SPEED = SPEED;
}
...
public void run() {
setSPEED(3);
...
public Main() {
...
btt.addActionListener(e -> {
BallThread.setSPEED(0);
});