2016-05-14 74 views
1

我工作的上的JavaFX項目首次在這裏得到舞臺是我的問題:JavaFX的FileChooser.showOptionDialog(階段)從其他類

我哈瓦一個MainApp,從那裏我打開主窗口,我有一個MenuBar,並從MenuBar我打開一個新的窗口,這是從MainApp在控制器中調用。

public void optionWindow() throws IOException { 
    Parent root = FXMLLoader.load(getClass().getResource("/views/options.fxml")); 
    Stage stage = new Stage(); 
    stage.setTitle("options"); 
    stage.setScene(new Scene(root)); 
    stage.setResizable(false); 
    stage.setAlwaysOnTop(true); 
    stage.show(); 
} 

在這個新窗口中,我有兩個按鈕,其中一個應該使用OptionsController類中的方法打開一個FileChooser。

public void updateOptions() { 
    FileChooser chooser = new FileChooser(); 
    chooser.showOpenDialog(stage); 
} 

MainApp啓動方法:

@Override 
public void start(Stage primaryStage) throws IOException { 
    Parent root = FXMLLoader.load(getClass().getResource("/views/Application.fxml")); 
    primaryStage.setTitle("Application"); 
    primaryStage.setScene(new Scene(root)); 
    primaryStage.show(); 
} 

我的問題是,如何才能得到舞臺?因爲舞臺位於MainAppController類中。是否有任何流行的戰爭讓階段和主要舞臺?

thx 4閱讀。

回答

1

你可以通過向Stage參考:

Stage stage = (Stage) node.getScene().getWindow()

其中節點可以是如你的其中一個按鈕。

另一種可能性是設置StageOptionsController

FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/options.fxml")); 
Parent root = null; 
try { 
     root = loader.load(); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
OptionsController controller = loader.getController(); 
controller.setParentStage(stage); 
+0

THX也就迎刃而解了 – Dusius