首页 > 解决方案 > Java Swing Timer 使用方法

问题描述

我基本上希望它按“空格”来启动计时器,然后在某个 Y 坐标点后停止它,然后在按下“空格”键时重新开始,如果这样的话。目前它并没有真正起作用,它只是完全停止而不是“清除”,所以我有点迷失了。如果你们中有人对此有任何想法,请分享!

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

这是 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);
}

标签: javaswingtimer

解决方案


首先查看如何在 Swing 中使用 Swing 计时器并发,以了解有关如何使用 SwingTimer以及为什么要使用 Swing 的详细信息。

接下来,在您的班级中,创建一个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();
        }
}

接下来,阅读如何使用键绑定,这将解决所有问题KeyListener,特别是如果您有其他可以获得键盘焦点的控件

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


推荐阅读