Javafx小部件在切换FXML后没有响应

Javafx小部件在切换FXML后没有响应,java,fxml,javafx-11,Java,Fxml,Javafx 11,我的javafx应用程序必须在选择组合框中的项目后切换其FXML文件。但是,组合框在切换后停止响应,但FXML添加的其他项目继续工作。我必须最小化和最大化应用程序以使其工作,或者使用FXML添加的小部件使其响应 comboBox.setOnAction(event -> { calculatorType = comboBox.getValue(); switch (calculatorType) { case "Basic&

我的javafx应用程序必须在选择组合框中的项目后切换其FXML文件。但是,组合框在切换后停止响应,但FXML添加的其他项目继续工作。我必须最小化和最大化应用程序以使其工作,或者使用FXML添加的小部件使其响应

comboBox.setOnAction(event -> {
        calculatorType = comboBox.getValue();
        switch (calculatorType) {
            case "Basic":
                System.out.println(root.getChildren());
                root.getChildren().clear();
                try {
                    stage.setMinWidth(430);
                    stage.setMinHeight(530);
                    stage.setMaxWidth(430);
                    stage.setMinHeight(530);
                    //root.getChildren().remove(comboBox);
                    root.getChildren().add(FXMLLoader.load(getClass().getResource("/Calculator/Resources" +
                            "/BasicCalculator.fxml")));
                    comboBox.setLayoutX(320);
                    comboBox.setLayoutY(0);
                    root.getChildren().add(comboBox);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case "Scientific":
                root.getChildren().clear();
                try {
                    stage.setMinHeight(530);
                    stage.setMinWidth(780);
                    stage.setMaxHeight(530);
                    stage.setMaxWidth(780);
                    root.getChildren().add(FXMLLoader.load(getClass().getResource("/Calculator/Resources/" +
                            "ScientificCalculator.fxml")));
                    comboBox.setLayoutX(675);
                    comboBox.setLayoutY(0);
                    root.getChildren().add(comboBox);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case "Converter":
                root.getChildren().clear();
                stage.setMinHeight(530);
                stage.setMinWidth(430);
                stage.setMaxHeight(530);
                stage.setMaxWidth(430);
                try {
                    root.getChildren().add(FXMLLoader.load(getClass().getResource("/Calculator/Resources/" +
                                "Converter.fxml")));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                comboBox.setLayoutX(320);
                comboBox.setLayoutY(0);
                root.getChildren().add(ComboPane);
                break;
        }
});
组合框在main中

组合框的代码:

ComboBox<String> comboBox = new ComboBox<>();
        comboBox.getStylesheets().add("Calculator/Resources/Styles/ComboBox.css");
        comboBox.getItems().add("Basic");
        comboBox.getItems().add("Scientific");
        comboBox.getItems().add("Converter");
        comboBox.getSelectionModel().select(0);
        comboBox.setLayoutX(320);
        comboBox.setLayoutY(0);
ComboBox-ComboBox=新的ComboBox();
getStylesheets().add(“Calculator/Resources/Styles/comboBox.css”);
comboBox.getItems()添加(“基本”);
comboBox.getItems().add(“科学”);
comboBox.getItems()添加(“转换器”);
comboBox.getSelectionModel().select(0);
comboBox.setLayoutX(320);
comboBox.setLayoutY(0);

谢谢。

我建议您使用不同的设计。以下是两种可能性

  • 通过调用方法,使每种类型的计算器成为一个单独的、只需切换
    Scene
    s的计算器。请注意,您可能需要将
    组合框
    添加到每个
    场景

  • 或者,将每个计算器设置为单独的,并将每个
    窗格
    添加到一个计算器中。通过使所选计算器的
    窗格
    和所有其他窗格不可见,在计算器
    窗格
    之间切换


    • 我建议您使用不同的设计。以下是两种可能性

      • 通过调用方法,使每种类型的计算器成为一个单独的、只需切换
        Scene
        s的计算器。请注意,您可能需要将
        组合框
        添加到每个
        场景

      • 或者,将每个计算器设置为单独的,并将每个
        窗格
        添加到一个计算器中。通过使所选计算器的
        窗格
        和所有其他窗格不可见,在计算器
        窗格
        之间切换


      第一种方法奏效了。谢谢,第一种方法奏效了。非常感谢。