为什么会显示很多小球?
我是JAVA的初学者,请教大家一个问题。
我想在屏幕上展现一个小球的移动,在遇到窗口边界的时候反弹,但是我做的程序却显示一大堆小球,而不是一个。
请问,我如何才能让屏幕上始终只看到一个小球呢?
下面是代码:
public class FirstThreadFrame
extends JFrame {
private BallPanel bPanel = null;
public FirstThreadFrame() {
Container c = this.getContentPane();
this.bPanel = new BallPanel();
c.add(this.bPanel, BorderLayout.CENTER);
Panel btnsPanel = new Panel();
//增加一个小球的按钮
JButton btnStart = new JButton("Add Ball");
btnStart.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
addBall();
}
}
);
btnsPanel.add(btnStart);
//显示所有小球按钮
JButton btnShowBalls = new JButton("Show Balls");
btnShowBalls.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
showBalls();
}
}
);
btnsPanel.add(btnShowBalls);
//关闭按钮
JButton btnClose = new JButton("Close");
btnClose.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
btnsPanel.add(btnClose);
c.add(btnsPanel, BorderLayout.SOUTH);
}
private void addBall() {
try {
Random r = new Random();
int x = Math.abs(r.nextInt())/this.bPanel.getWidth();
int y = Math.abs(r.nextInt())/this.bPanel.getHeight();
Ball b = new Ball(x,y, this.bPanel.getWidth(), this.bPanel.getHeight());
//在画布上增加一个小球
this.bPanel.addBall(b);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
private void showBalls() {
//创建一个线程,显示所有小球的位置变化
Thread th = new BallShowThread(this.bPanel);
th.start();
}
public static void main(String[] args) {
FirstThreadFrame fm = new FirstThreadFrame();
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setSize(300, 400);
fm.setLocation(200, 100);
fm.setTitle("Bounce");
fm.show();
}
}