gpt4 book ai didi

JavaFX/FXML 将 ChoiceBox 添加到根 Pane

转载 作者:行者123 更新时间:2023-12-02 03:37:40 25 4
gpt4 key购买 nike

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

我的问题是我并不真正理解场景生成器和“正常”代码之间的联系。

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

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

我可以通过场景生成器添加一些元素。效果很好。但现在我想添加一个带有一些值的选择框。我可以通过场景生成器添加一个空白的选择框。但没有值(value)观...

所以我找到了一些创建具有值的 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() 方法

AnchorPane root = new AnchorPane();

但是我必须通过代码编写所有内容,而不是通过场景生成器编写任何内容。这样对吗?或者有没有办法将“正常”代码和场景生成器功能结合起来?

谢谢

最佳答案

FXML 只是创建对象结构的一种方法。创建后如何处理这些对象完全取决于您。如果您从 fxml 创建场景图,则可以使用 Node 执行相同的操作。您可以对从 java 代码创建的对象执行以下操作,包括将子项添加到 Pane s 并设置 ChoiceBox 的项目...只需使用 fx:id 将相关节点注入(inject) Controller 即可属性并使用 FXMLLoader 获取 Controller 实例实例加载fxml。

示例:

消息.fxml

<?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));
}

}
FXMLLoader loader = new FXMLLoader(getClass().getResource("message.fxml"));
Parent root = loader.load();

MessageController controller = loader.getController();
controller.addMessage("Hello World");
controller.addMessage("42");

关于JavaFX/FXML 将 ChoiceBox 添加到根 Pane ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com