17、Java Swing Timer:计时器组件
計時器(Timer)組件可以在指定時間間隔觸發一個或多個 ActionEvent。
設置計時器的過程包括創建一個 Timer 對象,在該對象上注冊一個或多個動作偵聽器,以及使用 start() 方法啟動該計時器。
例如,以下代碼創建并啟動一個每秒(該時間由 Timer 構造方法的第一個參數指定)觸發一次動作事件的計時器。Timer 構造方法的第二個參數指定接收計時器動作事件的監聽器。
int delay=1000; //時間間隔,單位為毫秒 ActionListener taskPerformer=new ActionListener() {public void afrfcionPerformed(ActionEvent evt){//具體的任務} }; new Timer(delay,taskPerformer).start();創建 Timer 類時要指定一個延遲參數和一個 ActionListener。
延遲參數用于設置初始延遲和事件觸發之間的延遲(以毫秒為單位)。啟動計時器后,它將在向已注冊監聽器觸發第一個 ActionEvent 之前等待初始延遲。第一個事件之后,每次超過事件間延遲時它都繼續觸發事件,直到被停止。
創建 Timer 類之后,可以單獨更改初始延遲和事件間延遲,并且可以添加其他 ActionListener。如果希望計時器只在第一次時觸發然后停止,可以對計時器調用 setRepeats(false)。
Timer類的常用方法:
- addActionListener(ActionListener 1)---- 將一個動作監聽器添加到 Timer
- getDelay()---- 返回兩次觸發動作事件間延遲,以毫秒為單位
- isCoalesce()---- 如果 Timer 組合多個掛起的動作事件,則返回 true
- isRunning() ----如果 Timer 正在運行,則返回 true
- restart()---- 重新啟動 Timer,取消所有掛起的觸發并使它按初始延遲觸發
- setCoalesce(boolean flag)---- 設置 Timer 是否組合多個掛起的 ActionEvent
- setDelay(int delay)---- 設置 Timer 的事件間延遲,兩次連續的動作事件之間的毫秒數
- setLogTimers(boolean flag)---- 啟用/禁用計時器日志
- setRepeats(boolean flag) ----如果 flag 為 false,則指示 Timer 只向其監聽器發送一次動作事件
- start() ----啟動 Timer,使它開始向其監聽器發送動作事件
- stop()---- 停止 Timer,使它停止向其監聽器發送動作事件
例 1
編寫一個實例,模擬軟件安裝過程中顯示安裝進度信息的進度條。該實例中使用 Timer 類模擬安裝軟件的實際過程,JProgressBar 類顯示相應的進度信息,主要實現過程如下。
(1) 創建一個 JProgressBarDemo1 類并實現 ActionListener 接口和 ChangeListener 接口。
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.Timer; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class JProgressBarDemo1 implements ActionListener,ChangeListener {JFrame frame=null;JProgressBar progressbar;JLabel label;Timer timer;JButton b;public static void main(String[] agrs){new JProgressBarDemo1(); //創建一個實例化對象} }(2) 在構造方法中對進度條和計時器進行設置。主要代碼如下:
public JProgressBarDemo1() {frame=new JFrame("軟件安裝");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container contentPane=frame.getContentPane();label=new JLabel(" ",JLabel.CENTER); //創建顯示進度信息的文本標簽progressbar=new JProgressBar(); //創建一個進度條progressbar.setOrientation(JProgressBar.HORIZONTAL);//進度條的方向progressbar.setMinimum(0);//設置進度條的最小值 progressbar.setMaximum(100);progressbar.setValue(0);progressbar.setStringPainted(true);progressbar.addChangeListener(this); //添加事件監聽器//設置進度條的幾何形狀progressbar.setPreferredSize(new Dimension(300,20));progressbar.setBorderPainted(true);//繪制其邊框progressbar.setBackground(Color.pink);//添加啟動按鈕JPanel panel=new JPanel();b=new JButton("安裝");b.setForeground(Color.blue);//添加事件監聽器b.addActionListener(this);panel.add(b);timer=new Timer(100, this); //創建一個計時器,計時間隔為100毫秒//把組件添加到frame中contentPane.add(panel,BorderLayout.NORTH);contentPane.add(progressbar,BorderLayout.CENTER);contentPane.add(label,BorderLayout.SOUTH);frame.pack();frame.setVisible(true); }(3) 實現 ActionListener 接口中的 actionPerformed() 方法,在這里控制計時器的開始,以及進度條值的變化。具體代碼如下:
//實現事件監聽器接口中的方法 public void actionPerformed(ActionEvent e) {if(e.getSource()==b)timer.start();if(e.getSource()==timer){int value=progressbar.getValue();if(value<100){progressbar.setValue(++value);}else{timer.stop();frame.dispose();}} }(4) 實現 ChangeListener 接口中的 stateChange() 方法,具體代碼如下:
public void stateChanged(ChangeEvent e1) //實現事件監聽器接口中的方法 {int value=progressbar.getValue();if(e1.getSource()==progressbar){label.setText("目前已完成進度:"+Integer.toString(value)+" %");label.setForeground(Color.blue);} }(5) 運行程序,默認情況下進度條是 0%,如圖 1 所示。
單擊“安裝”按鈕后進度會一直發生變化,如圖 2 所示。
總結
以上是生活随笔為你收集整理的17、Java Swing Timer:计时器组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16、Java Swing JProgr
- 下一篇: 18、Java Swing JMenu和