2017-03-16 44 views
0

我有兩個窗口。如果屬性文件不存在,則第一個啓動。第二個是(我希望它)打開,如果文件已經存在,或者當用戶點擊創建文件的按鈕時。這裏是代替setOnCloseRequest代碼....JavaFx setOnCloseRequest&File check wait

try { 
     if(f.exists()) { 
      input = new FileInputStream("config.properties"); 
      prop.load(input); 
     } 

     if(f.exists() && prop.getProperty("name") != null){ 
      primaryStage.show(); 
     }else if(prop.getProperty("name") == null || !f.exists()){ 

      try { 
       Stage stage = new Stage(); 

       FXMLLoader loader = new FXMLLoader(getClass().getResource("summ.fxml")); 
       Parent root1 = loader.load(); 

       stage.setTitle("temp"); 
       stage.setResizable(false); 
       stage.setScene(new Scene(root1)); 

       stage.showAndWait(); 

       summController summController = loader.getController(); 
       String name = summController.getName(); 
       stage.setOnCloseRequest(e->{ 

        if(prop.getProperty("name") != null || f.exists()) { 
         primaryStage.show(); 
        } 
       }); 

之前,我剛做了 「primaryStage.show();」但無論如何,在關閉第一個窗口後,這會打開第二個窗口。所以,如果我按下按鈕,它會打開,但如果我點擊頂部角落的X.我不想要它。我嘗試了setOnCloseRequest來檢查用戶在退出之前是否設置了他的名字(基本上如果他按下按鈕來保存),它不會在我用X關閉時顯示,但在按下按鈕時也不會打開。我希望它打開時,按下按鈕,而不是X.我'認爲'問題可能是,當用戶按下按鈕,它「立即」檢查文件,但它尚未創建... 。

感謝您的回答!

回答

1

如果你不想關閉窗口,你應該消耗接近請求事件:

if(prop.getProperty("name") != null || f.exists()) { 
    primaryStage.show(); 
} else { 
    e.consume(); 
} 
+0

謝謝!有效。 – RekTek249