JavaFX / FXML将ChoiceBox添加到根窗格

时间:2016-05-15 07:40:39

标签: java javafx fxml

我已经开始使用JavaFX进行编程。

我的问题是我真的不理解场景构建器和“普通”代码之间的联系。

我有一个新的FXML文档和这样的代码

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

我可以通过Scene Builder添加一些元素。它工作正常。 但现在我想添加一个带有一些值的ChoiceBox。我可以通过Scene Builder添加一个空白的ChoiceBox。但没有价值......

所以我找到一些代码来创建一个值为

的ChoiceBox
ChoiceBox cb = new ChoiceBox();

        cb.setItems(FXCollections.observableArrayList("Eins","Zwei","Drei","vier"));

        cb.setValue("Zwei");
        cb.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
            @Override
            public void changed(ObservableValue observable, Object oldValue, Object newValue) {
                System.out.println(cb.getValue());
            }

        });

它也很好用。但是我如何将它添加到我的场景中?我认为以下代码行对我不起作用,因为我的根元素有一个FMXLLoader

root.getChildren().add(cb);

我认为只有在使用类似

的东西时才有getChildren()Methode
AnchorPane root = new AnchorPane();

但是我必须通过代码编写所有内容,而不是通过Scene Builder编写代码。这样对吗?或者有没有办法将“普通”代码和场景构建器功能结合起来?

由于

1 个答案:

答案 0 :(得分:2)

FXML只是一种创建对象结构的方法。创建后对这些对象的处理完全取决于您。如果从fxml创建场景图,则可以使用从{1}创建的对象Node来执行相同的操作,包括将子项添加到Pane并设置{的项目{1}} ...只需使用ChoiceBox属性将相关节点注入控制器,然后使用fx:id 实例来加载控制器实例FXML。

示例:

message.fxml

FXMLLoader
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>

<VBox fx:id="root" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxmltest.MessageController"> 
</VBox>
public class MessageController {

    @FXML
    private VBox root;

    public void addMessage(String message) {
        root.getChildren().add(new Label(message));
    }

}