Кнопка "СТОП" - Java

Узнай цену своей работы

Формулировка задачи:

Нужна помощь, нужно придумать кнопку стоп чтобы все шарики остановились, у меня не получается
Листинг программы
  1. import java.awt.Color;
  2. import java.awt.Container;
  3. import java.awt.Graphics;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.util.Timer;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JPanel;
  10. public class prakticna4 extends JFrame {
  11. JPanel panel = new JPanel();
  12. Graphics g;
  13. JButton btn = new JButton("Добавить шарик");
  14. JButton btt = new JButton("Cтоп");
  15. int i;
  16. public prakticna4() {
  17. setBounds(100, 200, 270, 350);
  18. Container contentPane = getContentPane();
  19. contentPane.setLayout(null);
  20. btn.setBounds(630, 10, 160, 20);
  21. btt.setBounds(910, 200, 70, 50);
  22. contentPane.add(btn);
  23. contentPane.add(btt);
  24. panel.setBounds(500, 40, 400, 400);
  25. panel.setBackground(Color.ORANGE);
  26. contentPane.add(panel);
  27. btn.addActionListener(new ActionListener() {
  28. public void actionPerformed(ActionEvent ev) {
  29. new BallThread(panel).start();
  30. i++;
  31. repaint();
  32. }
  33. });
  34. }
  35. public static void main(String[] args) {
  36. prakticna4 frame = new prakticna4();
  37. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  38. frame.setVisible(true);
  39. }
  40. public void paint(Graphics g){
  41. super.paint(g);
  42. g.drawString("Количество шариков: " + i, 640, 500);
  43. }
  44. }
  45. class BallThread extends Thread {
  46. JPanel panel;
  47. private int posX, posY;
  48. private final int BALL_SIZE = 35;
  49. private double alpha;
  50. private int SPEED = 3;
  51. BallThread(JPanel p) {
  52. this.panel = p;
  53. //задание начальной позиции и направления шарика
  54. posX = (int)((panel.getWidth()-BALL_SIZE)* Math.random());
  55. posY = (int)((panel.getHeight()-BALL_SIZE)* Math.random());
  56. alpha = Math.random() * 10;
  57. }
  58. public void run() {
  59. while(true) {
  60. posX += (int)(SPEED * Math.cos(alpha));
  61. posY += (int)(SPEED * Math.sin(alpha));
  62. //вычисление угла отражения
  63. if( posX >= panel.getWidth()-BALL_SIZE )
  64. alpha = alpha + Math.PI-5*alpha;
  65. else if( posX <= 0 )
  66. alpha = Math.PI-alpha;
  67. if( posY >= panel.getHeight()- BALL_SIZE )
  68. alpha = -alpha;
  69. else if( posY <= 0 )
  70. alpha = -alpha;
  71. paint(panel.getGraphics());
  72. }
  73. }
  74. public void paint(Graphics g) {
  75. //прорисовка шарика
  76. g.setColor(Color.BLUE);
  77. g.fillArc(posX, posY, BALL_SIZE, BALL_SIZE, 0, 360);
  78. g.setColor(Color.WHITE);
  79. g.drawArc(posX + 1, posY + 1, BALL_SIZE,BALL_SIZE, 120, 30);
  80. try {
  81. sleep(15);
  82. }
  83. catch(InterruptedException e) {
  84. e.printStackTrace();
  85. }
  86. //удаление шарика
  87. g.setColor(panel.getBackground());
  88. g.fillArc(posX, posY, BALL_SIZE, BALL_SIZE, 0, 360);
  89. }
  90. }

Решение задачи: «Кнопка "СТОП"»

textual
Листинг программы
  1. class BallThread extends Thread {
  2. ...
  3.     private static int SPEED = 0;//Сделать поле скорость статичным
  4.  
  5. public static void setSPEED(int SPEED) {
  6.         BallThread.SPEED = SPEED;
  7.     }
  8. ...
  9. public void run() {
  10.         setSPEED(3);
  11. ...
  12.  
  13.  
  14. public Main() {
  15. ...
  16. btt.addActionListener(e -> {
  17.             BallThread.setSPEED(0);
  18.         });

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут