Кнопка "СТОП" - 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);
- });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д