如何在JavaFX中访问对象的子级

时间:2014-11-07 22:54:17

标签: java javafx

假设我已经创建了一个可以生成子对象的对象,并且有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的新手,所以请,请指出我的误解。

1 个答案:

答案 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();
}