如何使用javaFX在树视图中插入多个不同的对象(类)
我试图创建一个TableView,其中每个级别有不同的类/对象类型。 我的树视图看起来像这样,其中对象A.1是类A的第一个实例,对象A.2是第二个实例,等等如何使用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
>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。问题是,在树视图中,我只有字符串,而没有实际的对象。今天晚些时候我会发布我的代码:)对不起,格式不好,我是新来的。我应该在哪里发布更长的答案?(这不会让我写更多的字符)谢谢你的回复,我今天晚些时候会试试,然后再给你回复!这管用!这正是我想要的,谢谢!