在java中,如何在每次点击鼠标时将球放到面板上?假设我点击面板3次,因此面板中应该有3个球弹跳。
我有这个代码块:
ball = new Thread() {
public void run() {
while (true) {
x += speedX;
y += speedY;
}
}
};
ball.start();
repaint();
try {Thread.sleep(100/3);}catch(InterruptedException ex){}
绘球的方法:
public void paintComponent(Graphics ball) {
super.paintComponent(ball);
if(clicks>0){
ball.setColor(Color.BLUE);
ball.fillOval((int) (x - rad), (int) (y - rad), (int)(2 * rad), (int)(2 * rad));
}
}
但是这个线程只丢掉了1个球。我也尝试了一系列线程,但它没有用。
答案 0 :(得分:1)
List<Ball>
(除非你打算让它们计算出来,即有一个x,y,球的计算方向偏离它)
你需要绘制所有球,这意味着'fillOval'的一些循环
您的帖子在更改x和y后需要调用'重绘'。 它还需要一些“睡眠”,否则球会跑得太快。
关于线程,我有点同意MadProgrammer:你可以有一个单一的线程迭代所有的球并推进他们的coordiantes。但是你需要几个线程(用于练习,或者为了更好的未来控制)它应该可以正常工作,只要每个线程都知道它负责哪个球。所以它就像
List<Ball> balls= ...;
Class BallRunnable implements Runnable{
private Ball ball;
private JComponent comp; // the one whose paintComponent does fillOval
public BallRunnable(Ball ball, JComponent comp){
this.ball=ball;
}
public void run(){
while(true){
ball.x +=speedX; ball.y+= speedY;
Thread.sleep(200);
comp.repaint();
}
}
}
答案 1 :(得分:0)
必须通过将MouseListener设置到面板来定义面板的行为,以启动一个可以创建新球的新线程。
final JPanel p = new JPanel();
p.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
Thread ball = new Thread() {
public void run() {
while (true) {
x += speedX;
y += speedY;
}
}
};
ball.start();
p.repaint();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});