我想在按下箭头键时将图像在屏幕上向右移动 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();
}
}
}
最佳答案
问题是你在 EDT(事件调度线程)内 sleep 。 repaint()
触发一个事件,该事件将由 EDT 调度,然后执行组件的实际重绘。由于您阻止了 EDT,因此重绘不会直接执行(但在所有代码结束后,会发生一个重绘事件(因为重绘事件会尽可能分组)。您可能需要使用 SwingWorker
来解决此问题。
关于java - 使用 Swing 移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10254702/