假设我已经创建了一个可以生成子对象的对象,并且有getChildren()
方法,f.e。 Group()
。然后我创建了另一个可以“存储”孩子的对象,例如。 VBox()
。然后我又创造了另一个对象,f.e。 Slider()
。
现在我通过调用myVBox.getChildren().add(mySlider);
将Slider对象添加到VBox子列表中,然后将VBox对象添加到Group对象列表中。假设所有内容都在返回myGroup
对象的函数内执行。
现在我不在函数中,我没有直接访问Slider属性的方法,我需要访问Group children,获取VBox,然后从VBox孩子那里获取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的新手,所以请,请指出我的误解。
答案 0 :(得分:5)
假设Slider
内有VBox
个其他节点,并且此框位于一个组内,您可以通过将结果节点转换为其getChildren()
来访问内部滑块类型。在此之前,如果节点是具有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();
}