0

我有一个带有几个按钮的工具栏。我想要几个这样的按钮来加载不同的 FXML 文件。现在完成的方法是在 Java 代码中写入 fxml 文件,并在每次调用时插入它。如果我可以调用 FXML 文件并获得正确的场景,那将是一个更好的选择。这是我加载设置视图的示例:

public void showModelSettings(){
    clearPane();
    GridPane gridPane = new GridPane();
    ColumnConstraints cc1 = new ColumnConstraints();
    cc1.setPercentWidth(50);
    ColumnConstraints cc2 = new ColumnConstraints();
    cc2.setPercentWidth(50);
    gridPane.getColumnConstraints().addAll(cc1,cc2);

    RowConstraints rc1 = new RowConstraints();
    rc1.setPercentHeight(30);
    RowConstraints rc2 = new RowConstraints();
    rc2.setPercentHeight(70);
    gridPane.getRowConstraints().addAll(rc1,rc2);

    //iwModel.setImage(new Image("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"));

    gridPane.setConstraints(cbModel, 0, 0);
    gridPane.setConstraints(btnImageChooser, 1, 0);

    gridPane.setConstraints(iwModel, 0, 1, 2, 1);


    gridPane.getChildren().addAll(cbModel, btnImageChooser,iwModel);
    mainPanel.getChildren().add(gridPane);

}

我在较早的日期使用过 tabpane,它的方便之处在于它可以加载“内容”,这在某种程度上是一个可以加载 fxml 文件的动作侦听器。我希望我的工具栏按钮具有此功能。

所有帮助将不胜感激!谢谢 :)

4

1 回答 1

0

我想也许我解决了它,还不能检查,因为我的项目在其他包中有几个错误。但这是我相信会起作用的代码:

private Parent replaceSceneContent(String fxml) throws Exception {
        Parent page = (Parent) FXMLLoader.load(InventorySystem.class.getResource("/hist/inventory/gui/fxml/"+fxml), ResourceBundle.getBundle("MessageBundle",localSettings.getLocale()), new JavaFXBuilderFactory());
        Scene scene = stage.getScene();
        if(scene == null) {
            scene = new Scene(page, 340, 280);
            scene.getStylesheets().add("hist/inventory/gui/startStyle.css");    //Endre styles?
            //stage.setResizable(false);    //Må kanskje flyttes
            stage.setScene(scene);
            Organizer.getWindowFitter().setScene(scene);
        } else {
            stage.getScene().setRoot(page);
        }
        stage.sizeToScene();
        return page;
    }

    public void setScene(String scene) throws Exception {
        replaceSceneContent(scene);
    }
于 2012-04-28T09:52:47.957 回答