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

thi*_*u_k 8 javafx-2 fxml

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

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

Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE);
Run Code Online (Sandbox Code Playgroud)

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

Crf*_*ira 12

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

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

void initialize()
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


jew*_*sea 6

这是执行此操作的一种方法:

((VBox) root).getChildren().add(new Button("Java Button"));
Run Code Online (Sandbox Code Playgroud)

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

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

该类型可能是Pane,因此在大多数情况下都可以强制转换为Pane。对于JavaFX中的大多数布局任务,通常建议使用布局窗格作为父项。