2016-05-14 11 views
1

からステージを取得し、私はJavaFXのプロジェクトに最初の時間のために働いて、ここに私の問題ですしています:JavaFXのFileChooser.showOptionDialog(ステージ)は、他のクラス

私はMainAppにしHAVA、そこから私は、メインウィンドウを開きますそこには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(); 
} 

この新しいウィンドウでは、2つのボタンがあり、そのうちの1つは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()

ノードは、例えば可能性が

をあなたのボタンの1つ。

別の可能性はOptionsControllerStageを設定することです:それは解決され

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

関連する問題