假设我已经创建了一个对象,它可以有 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/