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

如何使用javaFX在树视图中插入多个不同的对象(类),java,javafx,treeview,Java,Javafx,Treeview,我试图创建一个TableView,其中每个级别有不同的类/对象类型。 我的树视图看起来像这样,其中对象A.1是类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

我试图创建一个TableView,其中每个级别有不同的类/对象类型。 我的树视图看起来像这样,其中对象A.1是类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 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;
    }
}
导入javafx.application.application; 导入javafx.geometry.Insets; 导入javafx.scene.Group; 导入javafx.scene.scene; 导入javafx.scene.control.TreeItem; 导入javafx.scene.control.TreeView; 导入javafx.scene.layout.VBox; 导入javafx.stage.stage; 公共类SOTest扩展应用程序{ 公共静态void main(字符串[]args)引发IOException{ 发射(args); } @凌驾 public void start(Stage)引发异常{ //创建树项目 TreeItem root1=新的TreeItem(新的A(“A.1”); TreeItem1=新的TreeItem(新的B(“B.1”); TreeItem2=新的TreeItem(新的B(“B.2”); TreeItem3=新的TreeItem(新的C(“C.1”); root1.setExpanded(true); root1.getChildren().addAll(item1、item2、item3); TreeItem root2=新的TreeItem(新的A(“A.2”)); 第1项=新树项(新B.3); TreeItem子项=新的TreeItem(新的D(“D.1”); item1.getChildren().add(子项); root2.getChildren().addAll(item1); TreeItem base=新的TreeItem(“根节点”); base.setExpanded(true); base.getChildren().addAll(root1,root2); //创建树视图项目 TreeView视图=新的TreeView(基本); 视图。设置高度(300); VBox窗格=新的VBox(10); 窗格。设置填充(新插图(5,5,5,50)); pane.getChildren().addAll(视图); //搭建舞台 组节点=新组(窗格); 场景=新场景(节点,595320); stage.setTitle(“Diff对象树结构”); 舞台场景; stage.show(); } } 抽象类父类{ 受保护的字符串名称; 公共字符串getName(){ 返回名称; } 公共void集合名(字符串名){ this.name=名称; } 公共字符串toString(){ 返回名称; } } A类扩展了父类{ 公用A(字符串名称){ this.name=名称; } 公共B B; 公共C C; } B类扩展了父类{ 公共B(字符串名称){ this.name=名称; } 公共D; } C类扩展了父类{ 公共C(字符串名){ this.name=名称; } } 类D扩展了父类{ 公共D(字符串名称){ this.name=名称; } }

为什么不创建一个具有上述结构的类,a有列表和列表,B也有列表?如果您发布您迄今为止尝试过的代码,它将帮助您获得更好的解决方案。您的方法在我看来很好。你有什么问题吗?我已经发布了一个答案,这就是你想要的吗?谢谢你的建议,我尝试了你的方法。我创建了一个树状视图,其中a有列表和列表,B有列表。问题是,我不能将List、List等项放在treeview中,因为它们不是该类型的项。唯一的选择是从类型创建treeview,然后手动为每个项目应用toString方法,类似这样:for(Object o:List)treeview.add(o.toString)和this for each List。问题是,在树视图中,我只有字符串,而没有实际的对象。今天晚些时候我会发布我的代码:)对不起,格式不好,我是新来的。我应该在哪里发布更长的答案?(这不会让我写更多的字符)谢谢你的回复,我今天晚些时候会试试,然后再给你回复!这管用!这正是我想要的,谢谢!