gpt4 book ai didi

java - 如何在 JavaFX 中访问对象的子对象

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:58 26 4
gpt4 key购买 nike

假设我已经创建了一个对象,它可以有 child 并且有 getChildren() 方法,f.e. 组()。然后我创建了另一个可以“存储” child 的对象,f.e. VBox()。然后我再次创建另一个对象,f.e. slider ()

现在我通过调用 myVBox.getChildren().add(mySlider); 将 Slider 对象添加到 VBox 子对象列表,然后我将 VBox 对象添加到 Group 对象列表.假设一切都在返回 myGroup 对象的函数内执行。

现在我在函数之外,我无法直接访问 Slider 属性,我需要访问 Group children,获取 VBox,然后从 VBox children 获取 Slider。

据我所知,我应该调用 myGroup.getChildren().get(0); 来添加第一个子项(在本例中应该是 VBox 对象)。现在我需要更深入,所以我应该调用 myGroup.getChildren().get(0).getChildren().get(0);,对吗?

不幸的是 myGroup.getChildren().get(0); 返回的对象没有 getChildren() 方法,它是 Node 类的类型,而 myGroup.getChildren().get(0).getClass(); 返回该子项是 VBox 类型的信息。

我是 Java 的初学者,所以请,请指出我的误解。

最佳答案

假设您在具有其他节点的 VBox 中有一个 Slider,并且这个框在一个组中,您可以使用 getChildren() 访问内部 slider 通过将结果节点转换为它的类型。在此之前,请确保您可以通过检查节点是否是具有 instanceof 的特定类的实例来执行此转换。

这个简单的例子会帮助你。

private final Group group = new Group();
private final VBox vbox = new VBox();
private final Button button = new Button("Click");
private final Label label = new Label("Slider Value: ");

@Override
public void start(Stage primaryStage) {
vbox.getChildren().addAll(button, label, new Slider(0,10,4));
vbox.setSpacing(20);
group.getChildren().add(vbox);

button.setOnAction(e->{
Node nodeOut = group.getChildren().get(0);
if(nodeOut instanceof VBox){
for(Node nodeIn:((VBox)nodeOut).getChildren()){
if(nodeIn instanceof Slider){
label.setText("Slider value: "+((Slider)nodeIn).getValue());
}
}

}
});
Scene scene = new Scene(group, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}

关于java - 如何在 JavaFX 中访问对象的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811445/

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