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

回到顶部