如何将计时器放入GUI中



我有一个GUI表单供人们填写,我想在页面的右上角放一个倒计时计时器

是计时器获取剩余时间的方法。假设我的表单类是FillForm, timer方法在timer中找到。

我如何把一个动态(不断更新)定时器在GUI里面?

public String getRemainingTime() {
    int hours = (int)((this.remainingTime/3600000) % 60);
    int minutes = (int)((this.remainingTime/60000) % 60);
    int seconds = (int)(((this.remainingTime)/1000) % 60);
    return(format.format(hours) +  ":" +  format.format(minutes)+ 
          ":" +  format.format(seconds));       
}

GUI是使用NetBeans GUI生成器构建的。

Try This:

      import javax.swing.Timer; 
      Timer  timer=new Timer(1000,new ActionListener(){
         public void actionPerformed(ActionEvent e)
     {
        //code here 
     }
     });
     timer.start();
    //timer.stop()

每一秒定时器执行。

   Try This Demo :
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
class Counter {
private static int cnt;
static JFrame f;
public static void main(String args[]) {
 f=new JFrame();
 f.setSize(100,100);
 f.setVisible(true);

 ActionListener actListner = new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent event) {
  cnt += 1;
 if(cnt%2==0)
 {
    f.setVisible(true);
 }
 else
 {
    f.setVisible(false);
 }
 }
};
Timer timer = new Timer(500, actListner);
 timer.start();
  }
 }

你应该把计时器抽象到一个UI组件中。JLabel似乎是最合适的,因为它是您想要显示的文本。

public class TimerLabel extends JLabel {
    // Add in your code for 'format' and 'remainingTime'.
    // Note that the first time that 'getText' is called, it's called from the constructor
    // if the superclass, so your own class is not fully initialized at this point.
    // Hence the 'if (format != null)' check
    public TimerLabel() {
        Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                repaint();
            }
        });
        timer.start();
    }
    public String getRemainingTime() {
        int hours = (int) ((this.remainingTime / 3600000) % 60);
        int minutes = (int) ((this.remainingTime / 60000) % 60);
        int seconds = (int) (((this.remainingTime) / 1000) % 60);
        return (format.format(hours) + ":" + format.format(minutes) + ":" + format.format(seconds));
    }
    @Override
    public String getText() {
        if (format != null) {
            return getRemainingTime();
        } else {
            return "";
        }
    }

"我可以把这个添加到Swing中吗?"JPanel之类的?"

把它放在表单类的构造函数中。将Timer timer;声明为类成员,而不是局部作用域,这样您就可以像在按钮的actionPerformed中那样使用start()方法。就像

import javax.swing.Timer;
public class GUI extends JFrame {
    public Timer timer = null;
    public GUI() {
        timer = new Timer (500, new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                if (timerGetsToZero) {
                    ((Timer)e.getSource()).stop();
                } else {
                    timeLabel.setText(getRemainingTime());
                }
            }
        });
    }
    private void startButtonActionPerformed(ActionEvent e) {
        timer.start();
    }
}

相关内容

  • 没有找到相关文章

最新更新