Javafx 2 JavaFX:当最初从FXML加载场景时,在java代码中向场景添加一个新节点

Javafx 2 JavaFX:当最初从FXML加载场景时,在java代码中向场景添加一个新节点,javafx-2,fxml,Javafx 2,Fxml,当最初从FXML加载场景时,如何在java代码中向场景添加新节点? 我已从FXML加载,如下所示 Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE); 现在,比如说,如何在Java代码中将按钮添加到场景中?这里有一种方法: ((VBox) root).getChildren().add(n

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

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

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

现在,比如说,如何在Java代码中将按钮添加到场景中?

这里有一种方法:

((VBox) root).getChildren().add(new Button("Java Button"));
上面的代码段假定FXML中定义的顶部容器是VBox,如果它不是VBox,则将其强制转换为您选择的任何类型

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


类型可能是,因此在大多数情况下,转换到窗格将起作用。对于JavaFX中的大多数布局任务,通常建议使用布局窗格作为父级

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

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

void initialize()
然后,您可以在控制器上插入必须插入按钮的容器,并将按钮添加到其中:

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

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

方法
initialize
是在FXML文件中定义的组件生成之后调用的。

这种方法更简单,对我来说效果很好。我想知道如何在运行时确定容器的类型,以便编写更通用的代码。xxx的root instanceof或use getClass()应该用于测试,还是使用反射来查找所需的方法?