如何在一定时间后关闭一个阶段JavaFX

Posted

技术标签:

【中文标题】如何在一定时间后关闭一个阶段JavaFX【英文标题】:How to close a stage after a certain amount of time JavaFX 【发布时间】:2015-02-04 17:15:28 【问题描述】:

我目前正在使用两个控制器类。

在 Controller1 中,它创建了一个在主阶段之上打开的新阶段。

Stage stage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("Controller2.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();

现在一旦那个阶段打开,我希望它在关闭之前保持打开状态大约 5 秒。

在 Controller2 中,我尝试过实现类似

long mTime = System.currentTimeMillis();
long end = mTime + 5000; // 5 seconds 

while (System.currentTimeMillis() > end) 

      //close this stage  
 

但我不知道在 while 循环中放置什么来关闭它。我已经尝试了各种方法,但没有任何效果。

【问题讨论】:

【参考方案1】:

使用PauseTransition

PauseTransition delay = new PauseTransition(Duration.seconds(5));
delay.setOnFinished( event -> stage.close() );
delay.play();

【讨论】:

【参考方案2】:

按照你的方式做,这会奏效:

long mTime = System.currentTimeMillis();
long end = mTime + 5000; // 5 seconds 

while (mTime < end) 

    mTime = System.currentTimeMilis();
 
stage.close();

您需要将阶段保存到变量中。 也许最好在一个线程中运行它,这样你就可以在 5 秒内做一些事情。 另一种方法是运行 Thread.sleep(5000);这也将比 while 循环更高效。

【讨论】:

如果您使用这些技术,您将必须在线程中运行它,否则舞台的内容将不会显示。此外,您必须将 stage.close() 包装在 Platform.runLater(...) 中,因为它必须在 FX 应用程序线程上执行。使用PauseTransition 更容易。【参考方案3】:

此代码设置 TextArea 元素的文本并使其在一定时间内可见。它本质上是创建一个弹出系统消息:

public static TextArea message_text=new TextArea();

final static String message_text_style="-fx-border-width: 5px;-fx-border-radius: 10px;-fx-border-style: solid;-fx-border-color: #ff7f7f;";

public static int timer;
public static void system_message(String what,int set_timer)


    timer=set_timer;

    message_text.setText(what);
    message_text.setStyle("-fx-opacity: 1;"+message_text_style);

    Thread system_message_thread=new Thread(new Runnable()
    

        public void run()
        

            try
            
                Thread.sleep(timer);
            
            catch(InterruptedException ex)
            

            

            Platform.runLater(new Runnable()
            

                public void run()
                

                    message_text.setStyle("-fx-opacity: 0;"+message_text_style);

                   

            );

           

    );

    system_message_thread.start();


这个解决方案是完全通用的。您可以将 setStyle 方法更改为您想要的任何代码。您可以根据需要打开和关闭舞台。

【讨论】:

以上是关于如何在一定时间后关闭一个阶段JavaFX的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaFX 中获得一个阶段的关闭事件?

JavaFX如何改变阶段

JavaFX 2.0:关闭阶段(窗口)

成功登录JavaFX后如何切换主屏幕[关闭]

JavaFX:阶段关闭处理程序

JavaFX:如何在初始化期间从控制器获取阶段?