我是JavaFx的新手,我正在創建一個應用程序,並且需要類似於使用swing組件提供的JDialog類似的東西。我通過創建新的舞臺來解決這個問題,但現在我需要一種方法來通過單擊按鈕來從內部關閉新舞臺。 (是的,x按鈕也可以工作,但也需要按鈕)。爲了描述情況: 我有一個主要的課程,我從中創建了一個場景的主要舞臺。我使用FXML。JavaFX2:從本身內部關閉一個階段(子階段)
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Builder.fxml"));
stage.setTitle("Ring of Power - Builder");
stage.setScene(new Scene(root));
stage.setMinHeight(600.0);
stage.setMinWidth(800.0);
stage.setHeight(600);
stage.setWidth(800);
stage.centerOnScreen();
stage.show();
}
現在出現我所有的控制項目和菜單之類的東西,通過FXML和適當的控制類所做的主窗口。這是我決定在幫助菜單中包含關於信息的部分。所以我有一個事件正在進行時的菜單幫助 - 被激活,就像這樣:
@FXML
private void menuHelpAbout(ActionEvent event) throws IOException{
Parent root2 = FXMLLoader.load(getClass().getResource("AboutBox.fxml"));
Stage aboutBox=new Stage();
aboutBox.setScene(new Scene(root2));
aboutBox.centerOnScreen();
aboutBox.setTitle("About Box");
aboutBox.setResizable(false);
aboutBox.initModality(Modality.APPLICATION_MODAL);
aboutBox.show();
}
由於關於對話框窗口,通過與控制類FXML創建再看。有一張圖片,一個文本區域和一個按鈕,我希望這個按鈕可以從AboutBox.java類中關閉這個新的關於aboutBox的階段。
我發現自己能夠做到這一點的唯一方法是定義一個 public static Stage aboutBox; 在Builder.java類中,並且在處理關閉按鈕上的操作事件的方法中的AboutBox.java中引用該對象。但不知何故,它不覺得乾淨和正確。有沒有更好的方法?
在此先感謝您的建議。
像這樣關閉舞臺繞過onCloseRequest事件處理程序(如果有的話)。我會添加行stage.getOnCloseRequest()。handle(null);在stage.close()之前; – beardedlinuxgeek 2013-03-04 18:10:11
謝謝@beardedlinuxgeek。我有這個問題 - 我的窗口正在關閉,但我註冊的事件處理程序沒有被調用。您的解決方案解決了問題。 – 2014-07-15 11:06:39