Кнопка "СТОП" - 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);
        });

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


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

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

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