Прыгающие шары не будут останавливаться - PullRequest
0 голосов
/ 24 ноября 2018

Все, что я пытаюсь сделать, это создать Java-программу для прыгающих шариков.Что я и сделал.Каждый раз, когда пользователь нажимает стартовые шары, он будет заполнять экран.единственная проблема у меня в том, что я не знаю, как это сделать.Любая помощь будет оценена.Я попытался добавить что-то похожее на то, как я выполнял функцию addball, но не знаю, как применить это, чтобы приостановить шар.Я попытался сделать функцию puase, добавив кнопку паузы, но не знаю, как заставить ее работать

BounceFrame:

                import java.awt.BorderLayout;
            import java.awt.Container;
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;

            import javax.swing.JButton;
            import javax.swing.JFrame;
            import javax.swing.JPanel;

            public class BounceFrame extends JFrame {

                private static final long serialVersionUID = 1L;
                private BallComponent ballComponent;

                public BounceFrame() {
                    setTitle("Bounce");
                    ballComponent = new BallComponent();
                    add(ballComponent, BorderLayout.CENTER);

                    JPanel buttonPanel = new JPanel();

            //      Adds more balls.
                    addButton(buttonPanel, "Start", new ActionListener() {
                        public void actionPerformed(ActionEvent ae) {
                            addBall();
                        }
                    });

                    addButton(buttonPanel, "Pause", new ActionListener() {
                        public void actionPerformed(ActionEvent ae) {

                        }
                    }); 

            //      Closes the panel.
                    addButton(buttonPanel, "Close", new ActionListener() {
                        public void actionPerformed(ActionEvent ae) {
                            System.exit(0);
                        }
                    });

                    add(buttonPanel, BorderLayout.SOUTH);
                    pack();
                }

                public void addButton(Container c, String title, ActionListener listener) {
                    JButton b = new JButton(title);
                    c.add(b);
                    b.addActionListener(listener);

                }

                public void addBall() {
                    Ball b = new Ball(ballComponent.getBounds());
                    RunnableBall rB = new RunnableBall(b, ballComponent);
                    Thread t = new Thread(rB);
                    t.start();

                }

            }

RunnableBall:

                import java.util.logging.Level;
            import java.util.logging.Logger;

            public class RunnableBall implements Runnable {
                 private Ball b;
                    private BallComponent comp;
                    private static final int DELAY = 3; //Controls speed of the balls.

                    public RunnableBall(Ball b, BallComponent comp)
                    {
                        this.b = b;
                        this.comp = comp;
                    }

                    @Override
                    public void run() {
                        comp.add(b);
                        while (true)
                        {
                            b.move(comp.getBounds());
                            comp.repaint();
                            try
                            {
                                Thread.sleep(DELAY);
                            }
                            catch (InterruptedException ex) {
                                Logger.getLogger(RunnableBall.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }

            }

1 Ответ

0 голосов
/ 24 ноября 2018

Когда вы добавляете шарик, вам нужно сохранить объект RunnableBall, который вы создаете, в некоторой переменной коллекции, такой как, например, переменная типа ArrayList<RunnableBall>.Затем в ActionListener вашей кнопки паузы вы можете циклически проходить через ArrayList и вызывать метод паузы для каждого из ваших RunnableBall s.

Так что вам нужно будет определить метод pause внутриRunnableBall, которая устанавливает логическую переменную "isPaused" в значение true.Тогда вам нужно будет создать эту переменную isPaused внутри класса RunnableBall и изменить ее поведение метода run.Вы должны быть в состоянии понять это.

Одна вещь, с которой вам нужно позаботиться, это то, что, поскольку вы используете несколько потоков, вам понадобится связь между этими потоками (т.е.процесс установки переменной isPaused в true или false) для поточно-ориентированной .Я думаю, что вы могли бы добиться этого, объявив переменную isPaused равной volatile, но есть и другие способы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...