我使用此计时器将Star.png
移至JFrame & JPanel
用于移动具有计时器的星星的功能:
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
那么这里发生了什么?为什么xTest
过大于y
,尽管两者的范围相同?
答案 0 :(得分:5)
xTest
和y
不具有相同值的原因是因为Timer
具有initial delay(设置为构造函数中提供的延迟)。拨打start
后,y
的值增加1,需要100毫秒。与此同时,xTest
可以尽快增加。