2013-01-31 86 views
0

如何使顯示的兩個按鈕重置/暫停定時器?定時器工作,但我想改變按鈕的代碼,以便他們將更改計時器,而不是輸出到控制檯。謝謝。如何創建重置和暫停計時器的按鈕?

CODE:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class createWindow extends JFrame implements ActionListener 
{ 
public static void main(String[] args) 
{ 
    new createWindow(); 
}//end main 

createWindow() 
{ 
    super("Frame"); 
    setSize(400,70); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLayout(new FlowLayout()); 
    show(); 

     final JLabel time = new JLabel("Timer"); 
     JButton reset = new JButton("Reset timer"); 
     JButton pause = new JButton("Pause timer"); 
     reset.setActionCommand("resetClicked"); 
     pause.setActionCommand("pauseClicked"); 
     reset.addActionListener(this); 
     pause.addActionListener(this); 
     add(pause); 
     add(time); 
     add(reset); 

    long start = System.currentTimeMillis(); 

    while (true) 
     { 
      long timer = System.currentTimeMillis() - start; 
      final int seconds = (int) (timer/1000); 
      String display = Integer.toString(seconds); 
      time.setText(display); 
     }//end while loop 
    }//end constructor 

@Override 
public void actionPerformed(ActionEvent e) 
{ 
    String buttonClicked = e.getActionCommand(); 
    if(buttonClicked.equals("resetClicked")) 
    { 
     System.out.println("The reset button was clicked"); //Change to reset timer 
    } 
    else if(buttonClicked.equals("pauseClicked")) 
    { 
     System.out.println("The pause button was clicked"); //Change to pause timer 
    } 
}//end listener 
} 

回答

3

不要用一個無限循環while。這阻止了EDT。請使用Swing Timer。這會讓你控制起動和停止Timer

Stopwatch Example


旁註:

  • 不要使用JFrame.show作爲方法是棄用。改爲使用JFrame.setVisible。當所有組件都被添加到框架中時也調用此函數。
  • JButtons的功能有很大不同,因此需要爲每個按鈕使用單獨的ActionListener實例。
  • 首選的方法是直接使用JFrame實例,而不是將其擴展。
  • Java中的類名以大寫字母開頭,因此createWindow將變爲CreateWindow