如何让一个点上下移动

时间:2015-01-28 22:00:47

标签: java swing graphics

我试图在JFrame中上下移动一个简笔画。当我更改y时,整个事情就会发生变化。但我希望它向上移动,等待一秒,然后向下移动。 Thread.sleep尚未开展工作。 comp是一个类的对象绘制棒图。

if(key == KeyEvent.VK_UP)
{
    comp.setY(y++);
    comp.setY(y--);
}

1 个答案:

答案 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