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

标签 java javafx

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

相关文章:

java - 按属性对自定义对象的 ArrayList 进行排序

java - token 空指针异常

javafx - 尝试将 javafx WebView 渲染到离屏缓冲区或 FBO

JavaFX FXML 无效类型

java - 如何克隆 InputStream?

java - 我尝试序列化不可序列化的对象列表不起作用

java - java中如何获取执行目录路径

java - TableCell 超链接在 TableView 上未正确对齐 - JavaFX

JavaFX - 使用其他类作为节点

css - 如何更改窗口的边框颜色和顶部栏