如何将计时器放入GUI?

时间:2014-03-29 08:28:11

标签: java swing user-interface netbeans timer

我有一个用户填写表格的GUI,我想在页面的右上角放一个倒数计时器

这是计时器获取剩余时间的方法。假设我的表单类是FillForm,并且在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));       
}

使用NetBeans GUI构建器构建GUI。

3 个答案:

答案 0 :(得分:1)

试试这个:

      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();
  }
 }

答案 1 :(得分:1)

您应该将计时器抽象为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 "";
        }
    }

答案 2 :(得分:1)

  

"我可以将它添加到Swing.JPanel中吗?"

只需将其放在表单类的构造函数中即可。将Timer timer;声明为类成员,而不是本地作用域,以便您可以像按钮start()一样使用actionPerformed方法。像

这样的东西
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();
    }
}