2016-05-14 11 views
1

ich zum ersten Mal auf einem JavaFX Projekt arbeite und hier ist mein Problem:JavaFX FileChooser.showOptionDialog (Bühne) erhält die Bühne von einer anderen Klasse

ich MainApp hava, von dort öffne ich das Hauptfenster , da habe ich eine MenuBar und aus der MenuBar öffne ich ein neues Fenster, dieses wird im Controller von der MainApp aufgerufen.

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(); 
} 

In diesem neuen Fenster habe ich zwei Schaltflächen und einer von ihnen sollte einen FileChooser mit einer Methode in der OptionsController-Klasse öffnen.

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

MainApp Startmethode:

@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(); 
} 

Mein Problem ist, wie kann ich die Bühne zu bekommen? Weil die Bühne in der MainAppController-Klasse ist. Gibt es irgendeinen populären Krieg, um Stadien und den primärenStage herum zu erhalten?

thx 4 lesen.

Antwort

1

Sie einen Verweis auf ein Stage von bekommen kann:

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

wo Knoten könnte z.B. einer deiner Knöpfe.

Eine andere Möglichkeit ist es, die Stage im OptionsController einzustellen:

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 es gelöst – Dusius

Verwandte Themen