带Swing的java移动图像
我想在按下箭头键时将屏幕上的图像向右移动16。我想以1px/10ms的速度移动它,直到到达该点。该映像是在作为JPanel子级的类中创建的。 我编写了下一个代码,但图像不稳定地改变了位置,而不是移动:
public class Test extends JFrame implements KeyListener {
private int x=0;
private int y=0;
BufferedImage img;
...
...
public void paint(Graphics g){
g.drawImage(img,x,y,null);
}
// Move to a point 16 pixels to right
public void moveRight(){
for(int i=0;i<16;i++){
x++;
repaint();
try {
Thread.sleep(10); // Sleep 10 milliseconds until next position change
}catch (InterruptedException e) {}
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
moveRight();
}
}
}
# 1 楼答案
如果在另一个线程中调用moveRight()会怎么样
试试这个:
我还没有测试过,我甚至不知道这是不是一个好办法
# 2 楼答案
问题在于您在EDT(事件调度线程)内的睡眠
repaint()
触发一个事件,该事件将由EDT调度,并反过来执行组件的实际重新绘制。由于您正在阻止EDT,因此重绘不会直接执行(但在所有代码结束后,会发生一个重绘事件(因为重绘事件在任何可能的情况下都会分组)。您可能需要使用SwingWorker
来解决此问题