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