java - 了解 Swing 计时器

标签 java swing timer

我有这个计时器用于通过 JFrame 和 JPanel 移动 Star.png

移动带有计时器的星星的函数:

private final static int HEIGHT = 300;
.
.//more code here
.
.
  x=y=0;
.
. 

public void downRight() {
    Timer localTimer = new Timer(100, null);
      localTimer.setRepeats(false);
    localTimer.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {    
                x++;
                y++;
                repaint();
        }
    });
    int xTest=0;
    while (y < HEIGHT) {
        System.out.println("x "+(++xTest)+" y "+y);
        localTimer.start();
   }
    System.out.println("Reached");
}

运行计时器并测试 xTest 时,发现 y 值如下:

x 1 y 0

x 2 y 0

x 3 y 0

..... More Outputs here

.....

x 1653 y 1

x 1654 y 1

......

......

x 285836 y 299

x 285837 y 299

Reached

那么这里发生了什么?为什么xTesty大太多,尽管两者在同一范围内?

最佳答案

xTesty 没有相同值的原因是 Timer 具有 initial delay (设置为构造函数中提供的延迟)。调用 start 后需要 100 毫秒,y 的值才会增加 1。在此期间,xTest 被允许尽可能快地增加。

关于java - 了解 Swing 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179603/

相关文章:

java - 初始化没有对象类型的数组列表 - JAVA

java - 无法编译 Parquet 工具

javascript - 在 JavaScript 中创建一个倒数计时器

javascript - 定时器结束后如何重新启动?

java - 开启一对 `int` s

java - Netbeans 上用于 JavaServer Faces 的可视化 Web 编辑器在哪里

java - 画有网格的 JPanel,滚动时导致 CPU 使用率高

java - 如何在 JTable 中填充数据?

java - 单击托盘图标时显示 JFrame,即使最小化也是如此

ios - iOS 上的计时器不起作用