2014-12-06 82 views
5

我目前正在使用兩個控制器類。如何在一段時間後關閉舞臺JavaFX

在Controller1中,它創建一個新的階段,打開主要的階段。

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

現在一旦這個階段開放,我希望它在關閉之前保持打開狀態約5秒鐘。

在控制器2,我已經試過執行類似

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

while (System.currentTimeMillis() > end) 
{ 
     //close this stage 
} 

,但我不知道該怎麼把while循環中關閉它。我嘗試了各種各樣,沒有任何作品。

回答

17

使用PauseTransition

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

做它自己的方式,這會工作:

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

while (mTime < end) 
{ 
    mTime = System.currentTimeMilis(); 
} 
stage.close(); 

您需要在舞臺保存到一個變量。 也許最好在一個線程中運行它,以便在5秒鐘內完成一些操作。另一種方法是運行Thread.sleep(5000);這也比while循環更高效。

+3

如果您使用這些技術,您將*擁有*在線程中運行它,否則舞臺的內容將不會顯示。此外,您必須將'stage.close()'包裝在'Platform.runLater(...)'中,因爲這必須在FX應用程序線程上執行。使用'PauseTransition'更容易。 – 2014-12-06 17:56:06

0

此代碼設置一個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方法更改爲您需要的任何代碼。如果你喜歡,你可以打開和關閉舞臺。