Java 计时器通过重绘加速

标签 java graphics timer jpanel

我目前正在 JPanel 中使用计时器制作一些基本图形,但我无法弄清楚为什么计时器呈指数增长。

这是我的代码:

public class panel extends JPanel implements ActionListener {
    int r = 20;
    Timer forgo;

    public panel(){
        setSize(400,400);
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawOval(r, 20, 20, 20);
        forgo = new Timer(1000,this);
        forgo.start();
    }

    public void actionPerformed(ActionEvent e) {
        r+=5;
        repaint();
        System.out.println(r);
    }
}

如您所见,我尝试将椭圆形移动到面板的右边缘,但我的控制台打印出如下内容:

25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
145
150
155

几秒钟后,我不明白为什么速度会加快。

最佳答案

您正在 paintComponent() 方法中创建一个计时器,每次重新绘制组件时,该方法都会生成一个新计时器。

您看到的“加速”是您创建的大量计时器同时生效。

您可以尝试仅创建一次计时器,这样可以防止这种情况发生。

关于Java 计时器通过重绘加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159840/

相关文章:

java - 为什么这种排序可视化这么慢?

java - java中JLabel圆角的最简单代码

ios - 将参数传递给 Swift 中的选择器函数

c - 间隔定时器出现问题

java - Struts 如果将大十进制值 0.0 评估为 null

java - 创建可重用的 IntStreams 有用吗?如果是,怎么办?

c++ - 学习OpenGL需要什么?

c - 定时器触发新线程时的 tcp 通信问题

java - 为什么要使用 Deque 而不是内置 Stack<>?

java - 为什么 HttpStaticFileServer 的 netty 示例使用 RandomAccessFile?