Java计时器加速重绘

时间:2014-11-26 22:15:02

标签: 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
几秒钟之后,我无法弄清楚为什么会加速。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

正如@APerson所说,原因是每次重新绘制Timers时会产生大量的component,当系统第一次调用你的组件时,它会向内存添加1个Timer时间间隔1000毫秒,1000毫秒Timer将重新绘制component,这将导致向内存中添加新的Timer,现在第二个Timer也将添加新的Timer在1000毫秒之后它将repaint component和前一个等等。