以固定間隔重複 UI 任務
更新 Swing 元件的狀態必須在 Event Dispatch Thread(EDT)
上進行。該 javax.swing.Timer
觸發對 EDT 其 ActionListener
,使其成為一個不錯的選擇,執行迴轉操作。
以下示例每兩秒更新一次 JLabel
的文字:
//Use a timer to update the label at a fixed interval
int delay = 2000;
Timer timer = new Timer( delay, e -> {
String revertedText = new StringBuilder( label.getText() ).reverse().toString();
label.setText( revertedText );
} );
timer.start();
下面給出了使用此 Timer
的完整可執行示例:UI 包含標籤,標籤文字將每兩秒恢復一次。
import javax.swing.*;
import java.awt.*;
public final class RepeatTaskFixedIntervalExample {
public static void main( String[] args ) {
EventQueue.invokeLater( () -> showUI() );
}
private static void showUI(){
JFrame frame = new JFrame( "Repeated task example" );
JLabel label = new JLabel( "Hello world" );
//Use a timer to update the label at a fixed interval
int delay = 2000;
Timer timer = new Timer( delay, e -> {
String revertedText = new StringBuilder( label.getText() ).reverse().toString();
label.setText( revertedText );
} );
timer.start();
frame.add( label, BorderLayout.CENTER );
frame.pack();
frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
frame.setVisible( true );
}
}