我正在尝试在JFrame
中上下移动简笔画。当我改变y
它时,整个事情都会移动。但我希望它向上移动,等一下,然后向下移动。 Thread.sleep
一直没有奏效。 comp
是一个类的对象绘制简笔画。
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
comp.setY(y--);
}
Swing 是一个单线程环境,它也针对它的功能进行了合理的优化。
重绘管理器可能会将repaint
请求压缩为单个请求,因此您只能看到最后一个请求。
有关更多详细信息,请参阅 Swing 中的并发。
您"可以"做的是推迟第二次更新,使用类似 Swing Timer
的东西......
像...
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
// You may need to force a repaint here
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
comp.setY(y--);
// You may need to force a repaint here
}
});
timer.setRepeats(false);
timer.start();
}
。例如。
有关更多详细信息,请参阅如何使用摆动计时器。
就个人而言,我会设置一个能够根据它携带的状态变量执行向上和向下移动的Timer
,但这就是我
我也不鼓励使用 KeyListener
s,因为它们比它们的价值更麻烦,而是鼓励使用键绑定 API,请参阅如何使用键绑定以获取更多详细信息