JavaFX:当最初从FXML加载Scene时,在Java代码中向Scene添加一个新节点

时间:2013-08-09 17:46:12

标签: javafx-2 fxml

如果最初从FXML加载场景,如何在java代码中向Scene添加新节点? 我已从FXML加载,如下所示

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE);

现在说例如,如何在Java代码中向场景添加按钮?

2 个答案:

答案 0 :(得分:11)

我不知道你问题背后的原因。如果您想要的是在应用程序或场景初始化期间动态插入一些节点,我建议您在控制器上使用initialize method

此方法必须使用@FXML进行注释,并具有以下签名:

void initialize()

然后,您可以注入必须在控制器上插入按钮的容器,并向其添加按钮:

@FXML
HBox buttonBox // assuming your button container is a HBox
...

@FXML
protected void initialize() {
    buttonBox.getChildren().add(new Button("Click me!"));
}

在构建FXML文件中定义的组件之后调用方法initialize

答案 1 :(得分:5)

以下是一种方法:

((VBox) root).getChildren().add(new Button("Java Button"));

上面的代码段假设FXML中定义的顶部容器是VBox,如果它不是VBox,只需将其转换为您选择的任何类型。

  

我想知道如何在运行时确定容器的类型,因此我可以编写更通用的代码。

类型可能是Pane,因此在大多数情况下,投射到窗格都会有效。对于JavaFX中的大多数布局任务,通常建议使用布局窗格作为父窗格。