swing 将UI任务延迟特定时间
示例
所有Swing相关的操作发生在一个专门的线程(在EDT-é通风口dispatch牛逼hread)。如果该线程被阻止,则UI将变得无响应。
因此,如果要延迟操作,则不能使用Thread.sleep。请javax.swing.Timer改用。例如,以下Timer将颠倒JLabel
int delay = 2000;//指定计时器的延迟
Timer timer = new Timer( delay, e -> {
//一旦达到延迟,将执行以下代码
String revertedText = new StringBuilder( label.getText() ).reverse().toString();
label.setText( revertedText );
} );
timer.setRepeats( false );//确保计时器只运行一次Timer下面给出了一个使用它的完整的可运行示例:UI包含一个按钮和一个标签。按下按钮2秒钟后将反转标签文本
import javax.swing.*;
import java.awt.*;
public final class DelayedExecutionExample {
public static void main( String[] args ) {
EventQueue.invokeLater( () -> showUI() );
}
private static void showUI(){
JFrame frame = new JFrame( "Delayed execution example" );
JLabel label = new JLabel( "Hello world" );
JButton button = new JButton( "Reverse text with delay" );
button.addActionListener( event -> {
button.setEnabled( false );
//我们使用计时器来代替直接更新标签
//这允许引入延迟,同时保持EDT自由
int delay = 2000;
Timer timer = new Timer( delay, e -> {
String revertedText = new StringBuilder( label.getText() ).reverse().toString();
label.setText( revertedText );
button.setEnabled( true );
} );
timer.setRepeats( false );//确保计时器只运行一次
timer.start();
} );
frame.add( label,BorderLayout.CENTER);
frame.add( button,BorderLayout.SOUTH);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible( true );
}
}
热门推荐
10 分别发的祝福语简短
11 大外甥高考祝福语简短
12 小学毕业校长简短祝福语
13 搞工程发财祝福语简短
14 冬季祝福语男生文案简短
15 同事生子问候祝福语简短
16 退休文案寄语简短祝福语
17 送给自己的祝福语简短
18 简短祝福语毛笔字