JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 Timer

java.lang.Object
  繼承者 javax.swing.Timer
所有已實作的介面:
Serializable

public class Timer
extends Object
implements Serializable

在指定時間間隔觸發一個或多個 ActionEvent。一個範例用法是動畫物件,它將 Timer 用作繪製其幀的觸發器。

設置計時器的過程包括創建一個 Timer 物件,在該物件上註冊一個或多個動作偵聽器,以及使用 start 方法啟動該計時器。例如,以下程式碼創建並啟動一個每秒(該時間由 Timer 建構子的第一個參數指定)觸發一次動作事件的計時器。Timer 建構子的第二個參數指定接收計時器動作事件的偵聽器。

int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          //...Perform a task...
      }
  };
  new Timer(delay, taskPerformer).start();

建構 Timer 時要指定一個延遲參數和一個 ActionListener。延遲參數用於設置初始延遲和事件觸發之間的延遲(以毫秒為單位)。啟動了計時器後,它將在向已註冊偵聽器觸發第一個 ActionEvent 之前等待初始延遲。第一個事件之後,每次超過事件間延遲時它都繼續觸發事件,直到被停止。

建構之後,可以單獨更改初始延遲和事件間延遲,並且可以添加其他 ActionListener

如果希望計時器只在第一次時觸發然後停止,可以對計時器調用 setRepeats(false)

儘管所有 Timer 都使用一個共享執行緒(由第一個執行操作的 Timer 物件創建)執行等待,但是 Timer 的動作事件處理程序還會在其他執行緒(事件指派執行緒上)執行。這意味著 Timer 的操作處理程序可以安全地在 Swing 元件上執行操作。但是,它也意味著處理程序必須快速執行以保證 GUI 作出回應。

在 1.3 版本中,向 Java 平臺添加了另一個 Timer 類別:java.util.Timer。該類別和 javax.swing.Timer 的基本功能相同,但是 java.util.Timer 更常用,功能更多。javax.swing.Timer 有兩個特徵,它們可以讓使用 GUI 更方便。首先,其事件處理程序都是 GUI 開發人員所熟悉的,並且可以更簡單地處理事件指派執行緒。第二,其自動執行緒共享意味著不必採取特殊步驟來避免產生過多執行緒。相反,計時器使用同一個執行緒讓鼠標閃爍、使工具提示顯示等等。

通過查看 The Java Tutorial 中的 How to Use Timers 一節,可以找到使用計時器的更詳細的文檔和幾個範例。有關在此 Timer 類別和 java.util.Timer 之間進行選擇的更多範例和說明資訊,請參閱 The Swing Connection 中的 Using Timers in Swing Applications 一文。

警告:此類別的序列化物件與以後的 Swing 版本不相容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠端方法調用)。從 1.4 版本開始,已在 java.beans 套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參閱 XMLEncoder

另請參見:
java.util.Timer

欄位摘要
protected  EventListenerList listenerList
           
 
建構子摘要
Timer(int delay, ActionListener listener)
          創建一個 Timer 並將初始延遲和事件間延遲初始化為 delay 毫秒。
 
方法摘要
 void addActionListener(ActionListener listener)
          將一個動作偵聽器添加到 Timer
protected  void fireActionPerformed(ActionEvent e)
          通知為此事件型別的通知而註冊的所有偵聽器。
 String getActionCommand()
          返回將作為此計時器所觸發的 ActionEvent 中的動作命令傳遞的字元串。
 ActionListener[] getActionListeners()
          返回已在此計時器上註冊的所有動作偵聽器所組成的陣列。
 int getDelay()
          返回兩次觸發動作事件間延遲,以毫秒為單位。
 int getInitialDelay()
          返回 Timer 的初始延遲。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此 Timer 上註冊為 FooListener 的所有物件所組成的陣列。
static boolean getLogTimers()
          如果啟用了日誌記錄,則返回 true
 boolean isCoalesce()
          如果 Timer 組合多個掛起的動作事件,則返回 true
 boolean isRepeats()
          如果 Timer 多次將一個動作事件發送到其偵聽器,則返回 true(預設)。
 boolean isRunning()
          如果 Timer 正在運行,則返回 true
 void removeActionListener(ActionListener listener)
          從 Timer 移除指定的動作偵聽器。
 void restart()
          重新啟動 Timer,取消所有掛起的觸發並使它按初始延遲觸發。
 void setActionCommand(String command)
          設置將作為此計時器所觸發的 ActionEvent 中的動作命令傳遞的字元串。
 void setCoalesce(boolean flag)
          設置 Timer 是否組合多個掛起的 ActionEvent 觸發。
 void setDelay(int delay)
          設置 Timer 的事件間延遲,兩次連續的動作事件之間的毫秒數。
 void setInitialDelay(int initialDelay)
          設置 Timer 的初始延遲,即啟動計時器後觸發第一個事件之前要等待的時間(以毫秒為單位)。
static void setLogTimers(boolean flag)
          啟用/禁用計時器日誌。
 void setRepeats(boolean flag)
          如果 flagfalse,則指示 Timer 只向其偵聽器發送一次動作事件。
 void start()
          啟動 Timer,使它開始向其偵聽器發送動作事件。
 void stop()
          停止 Timer,使它停止向其偵聽器發送動作事件。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

listenerList

protected EventListenerList listenerList
建構子詳細資訊

Timer

public Timer(int delay,
             ActionListener listener)
創建一個 Timer 並將初始延遲和事件間延遲初始化為 delay 毫秒。如果 delay 小於等於 0,則該計時器一啟動就觸發事件。如果 listener 不為 null,則它會在計時器上註冊為動作偵聽器。

參數:
delay - 初始延遲和動作事件間延遲的毫秒數
listener - 初始偵聽器;可以為 null
另請參見:
addActionListener(java.awt.event.ActionListener), setInitialDelay(int), setRepeats(boolean)
方法詳細資訊

addActionListener

public void addActionListener(ActionListener listener)
將一個動作偵聽器添加到 Timer

參數:
listener - 要添加的偵聽器
另請參見:
Timer(int, java.awt.event.ActionListener)

removeActionListener

public void removeActionListener(ActionListener listener)
Timer 移除指定的動作偵聽器。

參數:
listener - 要移除的偵聽器

getActionListeners

public ActionListener[] getActionListeners()
返回已在此計時器上註冊的所有動作偵聽器所組成的陣列。

返回:
此計時器的所有 ActionListener;如果當前沒有註冊任何動作偵聽器,則返回一個空陣列
從以下版本開始:
1.4
另請參見:
addActionListener(java.awt.event.ActionListener), removeActionListener(java.awt.event.ActionListener)

fireActionPerformed

protected void fireActionPerformed(ActionEvent e)
通知為此事件型別的通知而註冊的所有偵聽器。

參數:
e - 要觸發的動作事件
另請參見:
EventListenerList

getListeners

public <T extends EventListener> T[] getListeners(Class<T> listenerType)
返回目前已在此 Timer 上註冊為 FooListener 的所有物件所組成的陣列。FooListener 是使用 addFooListener 方法註冊的。

可以用一個類別文字值(比如 FooListener.class)指定 listenerType 參數。例如,可以使用下面的程式碼查詢 Timer 實例 t 的動作偵聽器:

ActionListener[] als = (ActionListener[])(t.getListeners(ActionListener.class));
如果不存在這樣的偵聽器,則此方法將返回一個空陣列。

參數:
listenerType - 所請求的偵聽器的型別;該參數應該指定一個從 java.util.EventListener 繼承的介面
返回:
在此計時器上註冊為 FooListener 的所有物件所組成的陣列;如果沒有添加這樣的偵聽器,則返回一個空陣列
拋出:
ClassCastException - 如果 listenerType 沒有指定實作 java.util.EventListener 的類別或介面
從以下版本開始:
1.3
另請參見:
getActionListeners(), addActionListener(java.awt.event.ActionListener), removeActionListener(java.awt.event.ActionListener)

setLogTimers

public static void setLogTimers(boolean flag)
啟用/禁用計時器日誌。啟用時,每次計時器退出時都會向 System.out 發送一條資訊。

參數:
flag - true 表示要啟用日誌記錄
另請參見:
getLogTimers()

getLogTimers

public static boolean getLogTimers()
如果啟用了日誌記錄,則返回 true

返回:
如果啟用了日誌記錄,則返回 true;否則,返回 false
另請參見:
setLogTimers(boolean)

setDelay

public void setDelay(int delay)
設置 Timer 的事件間延遲,兩次連續的動作事件之間的毫秒數。這不會影響初始延遲屬性,該屬性可由 setInitialDelay 方法設置。

參數:
delay - 以毫秒為單位的延遲
另請參見:
setInitialDelay(int)

getDelay

public int getDelay()
返回兩次觸發動作事件間延遲,以毫秒為單位。

另請參見:
setDelay(int), getInitialDelay()

setInitialDelay

public void setInitialDelay(int initialDelay)
設置 Timer 的初始延遲,即啟動計時器後觸發第一個事件之前要等待的時間(以毫秒為單位)。建構時,此延遲設置為與事件間延遲相同,但是其值是獨立的,並且不受事件間延遲更改的影響。

參數:
initialDelay - 初始延遲(以毫秒為單位)
另請參見:
setDelay(int)

getInitialDelay

public int getInitialDelay()
返回 Timer 的初始延遲。

另請參見:
setInitialDelay(int), setDelay(int)

setRepeats

public void setRepeats(boolean flag)
如果 flagfalse,則指示 Timer 只向其偵聽器發送一次動作事件。

參數:
flag - 指定 false 將使計時器在發送第一個動作事件之後停止

isRepeats

public boolean isRepeats()
如果 Timer 多次將一個動作事件發送到其偵聽器,則返回 true(預設)。

另請參見:
setRepeats(boolean)

setCoalesce

public void setCoalesce(boolean flag)
設置 Timer 是否組合多個掛起的 ActionEvent 觸發。忙碌的應用程序可能跟不上 Timer 的事件產生速度,導致多個動作事件排隊。當處理這些事件時,應用程序會一個接一個地進行發送,導致 Timer 的偵聽器收到一個沒有事件間延遲的事件序列。組合操作可以將多個掛起的事件減少為一個事件,從而避免了這種情況的發生。預設情況下 Timer 將組合事件。

參數:
flag - 指定 false 將關閉組合

isCoalesce

public boolean isCoalesce()
如果 Timer 組合多個掛起的動作事件,則返回 true

另請參見:
setCoalesce(boolean)

setActionCommand

public void setActionCommand(String command)
設置將作為此計時器所觸發的 ActionEvent 中的動作命令傳遞的字元串。null 是可接受的值。

參數:
command - 動作命令
從以下版本開始:
1.6

getActionCommand

public String getActionCommand()
返回將作為此計時器所觸發的 ActionEvent 中的動作命令傳遞的字元串。可以為 nullnull 也是預設值。

返回:
在觸發事件中使用的動作命令
從以下版本開始:
1.6

start

public void start()
啟動 Timer,使它開始向其偵聽器發送動作事件。

另請參見:
stop()

isRunning

public boolean isRunning()
如果 Timer 正在運行,則返回 true

另請參見:
start()

stop

public void stop()
停止 Timer,使它停止向其偵聽器發送動作事件。

另請參見:
start()

restart

public void restart()
重新啟動 Timer,取消所有掛起的觸發並使它按初始延遲觸發。


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only