swing 将UI任务延迟特定时间
示例
所有Swing相关的操作发生在一个专门的线程(在EDT - é通风口d ispatch牛逼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 );
}
}
以上是 swing 将UI任务延迟特定时间 的全部内容, 来源链接: utcz.com/z/315813.html