在同一 window 内更改场景

Change scene within the same window

如何在同一个 window 中更改场景,而不是完全打开一个新的 window。

下面是将可选择的选项添加到选择框的位置,在做出选择时 "observe" 的末尾有一个侦听器,单击它会改变场景。

private void formulaOption2(){
list2.removeAll(list2);
String a = "Current Ratio";
String b = "Working Capital Ratio";
String c = "Debt to Equity Ratio";
String d = "Gross Profit Margin";
list2.addAll(a,b,c,d);
ChoiceBox2.getItems().addAll(list2);

//A LISTENER TO OBSERVE WHEN USER SELECTS ITEM
ChoiceBox2.getSelectionModel().selectedItemProperty().addListener( (v, oldValue, newValue) ->  {
    try {
        comboSelect2();
    } catch (IOException ex) {
        Logger.getLogger(Tab1FXMLController.class.getName()).log(Level.SEVERE, null, ex);
    }
}  );
}

下面是加载 FXML 文件的代码:

 public void comboSelect2() throws IOException {
if("Current Ratio".equals(ChoiceBox2.getSelectionModel().getSelectedItem())){

   FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Tab2FXML.fxml"));
         Parent root1 = (Parent) fxmlLoader.load();
         Stage stage = new Stage();
         stage.setTitle("Current Ratio");
         stage.setScene(new Scene(root1));
         stage.show();
}

}

只需将当前场景的根替换为您想要的新根即可:

public void comboSelect2() throws IOException {
    if("Current Ratio".equals(ChoiceBox2.getSelectionModel().getSelectedItem())){

       FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Tab2FXML.fxml"));
           Parent root1 = (Parent) fxmlLoader.load();
           ChoiceBox2.getScene().setRoot(root1);
    }
}