我试图在JFrame
中上下移动一个简笔画。当我更改y
时,整个事情就会发生变化。但我希望它向上移动,等待一秒,然后向下移动。 Thread.sleep
尚未开展工作。 comp
是一个类的对象绘制棒图。
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
comp.setY(y--);
}
答案 0 :(得分:1)
Swing是一个单线程环境,它也可以根据它的需要进行合理优化。
重绘管理器可能会将repaint
个请求压缩为单个请求,因此您只能看到最后一个请求。
有关详细信息,请参阅Concurrency in 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();
}
......例如。
有关详细信息,请参阅How to use Swing Timers。
就个人而言,我会设置一个Timer
,它能够根据它携带的状态变量执行向上和向下移动,但那就是我
我也不鼓励使用KeyListener
,因为它们比它们的价值更麻烦,而是鼓励使用Key Bindings API,有关详细信息,请参阅How to Use Key Bindings