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

Win*_*ged 4 java javafx

假设我已经创建了一个可以生孩子并且有getChildren()方法的对象Group().然后我创建了另一个可以"存储"孩子的对象,fe VBox().然后我又创造了另一个对象,fe Slider().

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

现在我不在函数中,我没有直接访问Slider属性的方法,我需要访问Group子项,获取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的新手,所以请,请指出我的误解.

Jos*_*eda 8

假设你有一个带有其他节点的Slider内部VBox,并且这个框在一个组内,你可以getChildren()通过将结果节点转换为它的类型来访问内部滑块.在此之前,如果节点是特定类的实例,请确保您可以通过cheking来执行此转换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();
}
Run Code Online (Sandbox Code Playgroud)