How to close a stage after a certain amount of time JavaFX

前端 未结 3 1744
时光取名叫无心
时光取名叫无心 2021-01-04 14:04

I\'m currently working with two controller classes.

In Controller1 it creates a new stage that opens on top of the main one.

Stage stage = new Stage         


        
相关标签:
3条回答
  • 2021-01-04 14:20

    This code sets the text of a TextArea element and makes it visible for a certain amount of time. It essentially creates a pop up system message:

    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();
    
    }
    

    This solution is completely general. You can change the setStyle methods to any code that you want. You can open and close a stage if you like.

    0 讨论(0)
  • 2021-01-04 14:21

    Use a PauseTransition:

    PauseTransition delay = new PauseTransition(Duration.seconds(5));
    delay.setOnFinished( event -> stage.close() );
    delay.play();
    
    0 讨论(0)
  • 2021-01-04 14:32

    Doing it your way, this would work:

    long mTime = System.currentTimeMillis();
    long end = mTime + 5000; // 5 seconds 
    
    while (mTime < end) 
    {
        mTime = System.currentTimeMilis();
    } 
    stage.close();
    

    You need to save your stage into a variable. Maybe it is better to run that in a Thread, so that you can do something within the 5 seconds. Another way would be to run a Thread.sleep(5000); and this would also be more performant than the while loop.

    0 讨论(0)
提交回复
热议问题