如何在单独的J Frame Form标签上显示Java Timer?

时间:2012-03-15 13:48:14

标签: java swing oop count

我有一个问题,我在java中有这个计时器代码,当它执行时它会在自己的JFrame标签上显示倒计时器,我想做的是在另一个JFrame表单标签上显示这个计时器而不必移动其他类的代码。

我希望你能帮助我,感谢很多人。

这是Timer类的代码:

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class TimerExample extends JFrame {

   final JLabel label;
   Timer countdownTimer;
   int timeRemaining = 10;

   public TimerExample() {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setSize(200, 200);
      label = new JLabel(String.valueOf(timeRemaining), JLabel.CENTER);
      getContentPane().add(label);

      countdownTimer = new Timer(1000, new CountdownTimerListener());
      setVisible(true);
      countdownTimer.start();
   }

   class CountdownTimerListener implements ActionListener {
      public void actionPerformed(ActionEvent e) {
         if (--timeRemaining > 0) {
            label.setText(String.valueOf(timeRemaining));
         } else {
            label.setText("Time's up!");
            countdownTimer.stop();
         }
      }
   }

   public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            new TimerExample();
         }
      });
   }

}

感谢

2 个答案:

答案 0 :(得分:4)

在这里,

以下是我的TestTimer类,它接受JLabel作为输入

public class TestTimer {
     private JLabel label;
     Timer countdownTimer;
     int timeRemaining = 10;

     public TestTimer(JLabel passedLabel) {
        countdownTimer = new Timer(1000, new CountdownTimerListener());
        this.label = passedLabel;
        countdownTimer.start();
     }

      class CountdownTimerListener implements ActionListener {
          public void actionPerformed(ActionEvent e) {
             if (--timeRemaining > 0) {
                 label.setText(String.valueOf(timeRemaining));
              } else {
                 label.setText("Time's up!");
                 countdownTimer.stop();
              }
          }
      }
  }

这是另一个实际扩展JFrame并在其中显示标签的Main类,

public class TimerJFrame extends JFrame{    
    private static final long serialVersionUID = 1L;
    private JLabel label;

    public TimerJFrame() {
     setDefaultCloseOperation(EXIT_ON_CLOSE);
         setSize(200, 200);
         label = new JLabel("10", JLabel.CENTER);
         getContentPane().add(label);
         new TestTimer(label);
         setVisible(true);
    }

    public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            new TimerJFrame();
         }
      });
   }
}

第二代码将创建的JLabel传递给第一类,第一类使用它来显示计时器。

答案 1 :(得分:2)

您需要按照以下步骤进行操作

  1. 修改TimerExample构造函数以接受JLabel。并使用passwd JLabel
  2. 初始化TimerExample类的JLabel
  3. 从其他JFrame类传递JLabel。
  4. 从中删除主要方法,因为它不是必需的。
  5. 在这里第一步,构造函数将接受来自其他类的预定义JLabel并使用它们来显示计时器。