Java 每当我点击一个按钮时,定时器就会加快速度
我想在每次单击按钮时在小程序中执行动画。我第一次点击按钮时,一切正常。但是第二次,动画的速度增加了。第三次动画的速度增加了一点,第四次、第五次 我不知道计时器怎么了。我怎样才能修好它 在小程序中,我使用以下代码:Java 每当我点击一个按钮时,定时器就会加快速度,java,timer,applet,repaint,Java,Timer,Applet,Repaint,我想在每次单击按钮时在小程序中执行动画。我第一次点击按钮时,一切正常。但是第二次,动画的速度增加了。第三次动画的速度增加了一点,第四次、第五次 我不知道计时器怎么了。我怎样才能修好它 在小程序中,我使用以下代码: JButton btnIniciar = new JButton("Iniciar"); btnIniciar.addActionListener(new ActionListener() { public void actionPerformed(Action
JButton btnIniciar = new JButton("Iniciar");
btnIniciar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Timer timer = new Timer(50, new ActionListener(){
public void actionPerformed(ActionEvent e) {
//I have a list of packages to animate
for (Package p: listaPaquetes){
p.animate();
panel.repaint();
}
}
});
timer.start();
}
这是面板中重新喷漆的代码:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//I use the same list of the applet
for (Package p: listaPaquetes){
//Paint the package
p.paintPackage(g);
}
}
当您按下按钮时,您正在创建新的
javax.swing.Timer
并调用Timer.start()
,在这种情况下,该计时器计划在按下按钮后运行50毫秒,并每50毫秒重复一次
当您第二次按下按钮时,您创建并启动另一个计时器(一个新的计时器),该计时器每50毫秒重新工作一次,初始延迟为50毫秒。现在,重新绘制调用的数量实际上增加了一倍
第三次按下时,重新绘制调用的次数增加了三倍,因为有3个计时器正在运行
如果您的按钮按下时间正确,它将看起来好像速度增加了三倍(3个按钮按下)
如果您不希望出现这种行为,您可以阻止计时器运行,如果它已经像这样运行:
private Timer timer = null;
// ...
JButton btnIniciar = new JButton("Iniciar");
btnIniciar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// prevent the timer from running again if it is already running
if ( timer != null && timer.isRunning() ) return;
timer = new Timer(50, new ActionListener(){
public void actionPerformed(ActionEvent e) {
//I have a list of packages to animate
for (Package p: listaPaquetes){
p.animate();
panel.repaint();
}
}
});
timer.start();
}
请注意,您需要将timer
设置为实例变量。您还可以替换该行:
if ( timer != null && timer.isRunning() ) return;
与
我只是想向您展示Timer
具有isRunning()
方法
您还可以通过调用timer.stop()
方法来停止计时器。当您按下按钮时,您正在创建新的javax.swing.timer
并调用timer.start()
,在这种情况下,该方法计划在按下按钮后运行50毫秒,并每50毫秒重复一次
当您第二次按下按钮时,您创建并启动另一个计时器(一个新的计时器),该计时器每50毫秒重新工作一次,初始延迟为50毫秒。现在,重新绘制调用的数量实际上增加了一倍
第三次按下时,重新绘制调用的次数增加了三倍,因为有3个计时器正在运行
如果您的按钮按下时间正确,它将看起来好像速度增加了三倍(3个按钮按下)
如果您不希望出现这种行为,您可以阻止计时器运行,如果它已经像这样运行:
private Timer timer = null;
// ...
JButton btnIniciar = new JButton("Iniciar");
btnIniciar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// prevent the timer from running again if it is already running
if ( timer != null && timer.isRunning() ) return;
timer = new Timer(50, new ActionListener(){
public void actionPerformed(ActionEvent e) {
//I have a list of packages to animate
for (Package p: listaPaquetes){
p.animate();
panel.repaint();
}
}
});
timer.start();
}
请注意,您需要将timer
设置为实例变量。您还可以替换该行:
if ( timer != null && timer.isRunning() ) return;
与
我只是想向您展示Timer
具有isRunning()
方法
您还可以通过调用timer.stop()
方法来停止计时器。我不知道把计时器停在哪里,所以每次我按下按钮,我也会停止计时器,除了第一次。我不知道把计时器停在哪里,所以每次我按下按钮,我也会停止计时器,除了第一次。