JavaFX : Adding a new node to Scene in java code when Scene is initially loaded from FXML

杀马特。学长 韩版系。学妹 提交于 2019-12-18 16:19:07

问题


How can I add a new node to the Scene in java code when Scene is initially loaded from FXML ? I have loaded from FXML as shown below

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

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

Now say for example how do I add button to the scene in Java code?


回答1:


I do not know the reason behind your question. If what you want is to insert some nodes dynamically during the application or scene initialization, I suggest you use a initialize method at your controller.

This method must be annotated with @FXML and have the following signature:

void initialize()

Then, you can inject the container where the button must be inserted on the controller and add the button to it:

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

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

The method initialize is called after the components defined at the FXML file were built.




回答2:


Here is one way to do this:

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

The snippet above assumes that the top container defined in your FXML is a VBox, if it is not a VBox, just cast it to whatever type you have chosen.

I wonder how I can determine the type of the container at runtime, so I can write a more generic code.

The type is likely a Pane, so casting to a Pane will work in most cases. Using a layout Pane as a Parent is usually recommended for most layout tasks in JavaFX.



来源:https://stackoverflow.com/questions/18152639/javafx-adding-a-new-node-to-scene-in-java-code-when-scene-is-initially-loaded

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!