2012-03-15 43 views
1

我有一個問題,我已經在Java定時器的代碼,它在執行時會顯示它自己的JFrame標籤上倒數計時器,我想要做的是什麼,而不必移動顯示另一個JFrame窗體標籤已在此計時器代碼給其他類。如何在單獨的J Frame Form標籤上顯示Java Timer?

我希望你能幫助我解決這個感謝很多人。

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

} 

感謝

+0

你能提供更多關於你的問題的細節嗎?你究竟想要做什麼,爲什麼?你會有一個主窗口,你希望啓動另一個窗口(通常是一個對話框),顯示你的倒計時器嗎?此外,通常在這些情況下,您首先發布代碼嘗試解決此問題,然後顯示任何錯誤消息或異常並描述任何行爲問題。這樣我們就可以確切知道你可能做錯了什麼,以及如何更好地幫助你。 – 2012-03-15 13:53:29

+0

這段代碼甚至不會編譯;該構造函數包含的代碼似乎假定這個類擴展了'JFrame',但正如它所寫的那樣。什麼是你的問題,確切地說 - 如何使這不依賴於'JFrame'?看起來你已經在一半了。 – 2012-03-15 13:55:14

回答

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,並顯示在它的標籤另一主類,

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到第一類和第一類使用它來顯示計時器。

+0

非常感謝拉胡爾它幫助了很多。 – Walid 2012-03-15 14:32:18

+0

嘗試此操作並將其添加到JFrame。TImer不起作用,數字仍然是10 – 2016-03-13 05:37:15

2

您需要按照下面的步驟,

  1. 修改TimerExample構造函數接受的JLabel。並使用passwd的JLabel
  2. 通行證從其他JFrame類的JLabel初始化TimerExample類的JLabel。
  3. 刪除主要方法,因爲它不會被要求。

這裏卜第一步驟中,構造將接受來自其它類的預定義的JLabel並使用它們來顯示計時器。

+0

我有一個登錄窗口,主窗口和TimerExample類,當我點擊登錄窗口中輸入主窗口中會顯示和多數民衆贊成在我想要的計時器出現 – Walid 2012-03-15 14:07:23

+0

我嘗試設置一個標籤在主窗口=到計時器類中的標籤,但它似乎沒有在某個階段工作程序凍結: – Walid 2012-03-15 14:08:34

+0

從我的主窗口傳遞JLabel到TimerExample類,以便TimerExample類將更新您傳遞的標籤。 – 2012-03-15 14:10:52