全部 我想做的是创建一个弹跳球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);
}
}
}
}
答案 0 :(得分:1)
添加球时,需要将要创建的RunnableBall
对象存储在某个集合变量中,例如ArrayList<RunnableBall>
类型的变量。然后,在“暂停”按钮的ActionListener
中,您可以遍历ArrayList
并在每个RunnableBall
上调用一个暂停方法。
因此,您需要在pause
内定义一个RunnableBall
方法,该方法将布尔变量“ isPaused”设置为true。因此,您需要在isPaused
类内创建变量RunnableBall
,并使其更改run
方法的行为。您应该能够弄清楚这一点。
您需要注意的一件事是,由于您正在使用多个线程,因此需要这些线程之间的通信(即,将isPaused
变量设置为true或false)是线程安全的。我认为您可以通过将isPaused
变量声明为volatile
来实现这一点,但是还有其他方法可以实现。