2015-10-08 138 views
0

我必須在網站的所有註冊頁面上顯示倒數計時器(可能有3個網頁用於註冊)。 假設完成註冊的時間限制爲1小時,並且用戶花費10分鐘完成第一個網頁上的字段,當他點擊下一個按鈕進入第二個網頁 計時器應該顯示從49分鐘開始的時間。我如何將這個功能添加到我現有的代碼中。倒數計時器jn Java

這是我倒數計時器的代碼。

public class CountdownTimer extends JLabel implements ActionListener { 

    private static final long serialVersionUID = 1L; 
    private long count; 
    private long timerStart; 
    private DateFormat dateFormat; 

    javax.swing.Timer timer = new javax.swing.Timer(1000, this); 

    public CountdownTimer(int minutes, int seconds) { 
     // suppose to show as in 30 MIN 30 SEC. 
     super(" ", JLabel.CENTER); 

     Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.MINUTE, minutes); 
     cal.set(Calendar.SECOND, seconds); 
     count = cal.getTime().getTime(); 

     dateFormat = new SimpleDateFormat("mm:ss"); 

     timer.start(); 
     timerStart = System.currentTimeMillis(); 
     long elapsedTime = System.currentTimeMillis()-timerStart; 

     System.out.println(elapsedTime); 

    } 

    public void actionPerformed(ActionEvent e) { 
     // suppose to countdown till 00 MIN 00 SEC 
     setText(dateFormat.format(count)); 
     count -= 1000; 

     if (dateFormat.format(count).equalsIgnoreCase("00:00")) { 
      closeWindow(); 

     } 
    } 

    public void closeWindow() { 

     System.exit(1); 

    } 

    public static void main(String[] args) { 

     JFrame frame = new JFrame(); 

     frame.setTitle("Countdown Timer"); 
     frame.getContentPane().setBackground(Color.white); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 150); 

     JPanel panel = new JPanel(); 
     JLabel label = new JLabel("Registration closes in: "); 
     panel.add(label); 

     JTextField jTextField = new JTextField(); 
     panel.add(jTextField); 

     CountdownTimer c = new CountdownTimer(00, 60); 

     frame.getContentPane().add(c); 
     frame.setVisible(true); 
     frame.getContentPane().add(panel); 
     frame.setVisible(true); 
    } 
} 
+1

也許你應該查看哪些技術用來創建一個WEB頁面,然後我們可以提供幫助。目前您正在使用Swing(不是WEB) – Dainesch

+0

您是否檢查啓動時的計數是否相等?我打賭elapsedTime總是零,但偶爾1.也許你應該檢查[持續時間](http://docs.oracle.com/javase/8/docs/api/java/time/Duration.html) – matt

+0

你應該使用用於Java Web的動態web項目,而不是swing。如果你使用swing,也許看看mvc模式? –

回答

0

這很簡單我甚至都不會用api。

count = 60*minutes + seconds; 

然後在操作監聽器。

count--; 
if(count==0) exit(0); 

如果你想要更強大的話。你應該使用java.time api。

Instant finished = Instant.now().plus(minutes, ChronoUnit.MINUTES).plus(seconds, ChronoUnit.SECONDS); 

現在在您的動作監聽器中,您可以檢查是否已達到完成時間。

if(Instant.now().isBefore(finished)){ 
    //do stuff 
} else{ 
    //do your finished stuff. 
}