如何使用 javaFX 在 TreeView 中插入多个不同的对象 (类)

How to insert multiple different objects (classes) in a TreeView using javaFX

我正在尝试创建一个 TableView,其中每个级别有不同的 classes/object 类型。 我的 TreeView 看起来像这样,其中对象 A.1 是 Class A 的第一个实例,对象 A.2 是第二个实例,依此类推。

>RootItem
    >Object A.1
        >Object B.1
        >Object B.2
        >Object C.1
    >Object A.2
        >Object B.3
            >Object D.1

我只需要显示对象的名称(即 toString 方法),但我还需要对象不仅仅是字符串,所以我可以稍后访问其他属性(即如果用户双击对象)。

这将如何实施? 有没有其他我没有想到的方法?

import java.io.IOException;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SOTest extends Application{

    public static void main(String[] args) throws IOException  {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        //Creating tree items
        TreeItem<Parent> root1 = new TreeItem<Parent>(new A("A.1"));
        TreeItem<Parent> item1 = new TreeItem<Parent>(new B("B.1"));
        TreeItem<Parent> item2 = new TreeItem<Parent>(new B("B.2"));
        TreeItem<Parent> item3 = new TreeItem<Parent>(new C("C.1"));
        root1.setExpanded(true);
        root1.getChildren().addAll(item1, item2, item3);
        
        
        TreeItem<Parent> root2 = new TreeItem<Parent>(new A("A.2"));
        item1 = new TreeItem<Parent>(new B("B.3"));
        TreeItem<Parent> subItem = new TreeItem<Parent>(new D("D.1"));
        item1.getChildren().add(subItem);
        root2.getChildren().addAll(item1);

        
        TreeItem base = new TreeItem("Root Node");
        base.setExpanded(true);
        base.getChildren().addAll(root1, root2);
        //Creating a TreeView item
        TreeView view = new TreeView(base);
        view.setPrefHeight(300);
        VBox pane = new VBox(10);
        pane.setPadding(new Insets(5, 5, 5, 50));
        pane.getChildren().addAll(view);
        //Setting the stage
        Group node = new Group(pane);
        Scene scene = new Scene(node, 595, 320);
        stage.setTitle("Diff Object Tree Structure");
        stage.setScene(scene);
        stage.show();
    }
}

abstract class Parent{
    protected String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public String toString() {
        return name;
    }
}

class A extends Parent{
    public A(String name) {
        this.name = name;
    }
    public B b;
    public C c;
}

class B extends Parent{
    public B(String name) {
        this.name = name;
    }
    public D d;
}

class C extends Parent{
    public C(String name) {
        this.name = name;
    }
}

class D extends Parent{
    public D(String name) {
        this.name = name;
    }
}