Java Swing Timer如何使用它

时间:2018-06-07 07:21:15

标签: java swing timer

我基本上希望它按“空格”来启动计时器,然后在某个Y坐标点之后停止它,然后在按下“空格”键时再次启动,如果这样做的话。实际上它并没有真正完全停止而不是“清除”所以我有点失去了。如果您有任何想法请分享!!

iv一直在思考,我可能需要一个我的计时器的字符串,这是我以前从未做过的,所以任何帮助或文章的链接都会有所帮助

这是iv到目前为止所做的事情。

if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
    long počasi=10;
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            y1 = y1 - 1;
            jButton2.setLocation(x1, y1);
            if (y1 < 0) {
                timer.cancel();
                jButton2.setLocation(x, y);
                timer.purge();
            }
        }
    }, new Date(), počasi);
}

1 个答案:

答案 0 :(得分:1)

首先看看How to use Swing TimersConcurrency in Swing,了解有关如何使用Swing Timer的详细信息以及为什么要这样做。

接下来,在您的课程中,创建一个timer属性...

private Timer timer;

然后在构造函数中,创建Timer ...

的实例
timer = new Timer(5, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        y1 = y1 - 1;
        if (y1 < 0) {
            y1 = 0;
            timer.stop();
        }
        jButton2.setLocation(x1, y1);
    }
});

然后,当您需要时,启动timer ...

if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
        long počasi=10;
        if (!timer.isRunning()) {
            timer.start();
        }
}

接下来,请阅读How to Use Key Bindings,这将解决KeyListener的所有问题,尤其是如果您有其他可以获得键盘焦点的控件

另外,请记住,组件动画很难。如果您的容器有布局管理器,那么您将与之抗争