JavaFX TreeTableView
JavaFX TreeTableView类是JavaFX TreeView和JavaFX TableView的组合。总体而言,JavaFX TreeTableView是一个" TableView",其中包含一个项目树作为其最左侧的列。其余的列是普通表列。
JavaFXTreeTableView
在其树中每个项目的行上显示。换句话说,每个树节点右侧显示的列属于左侧树中的项目。 JavaFX TreeTableView的最左列中的树项可以展开和折叠。随着树项目的展开和折叠,任何显示或者隐藏的树项目的行也都隐藏在右侧的列中。
创建一个TreeTableView
要使用JavaFX" TreeTableView",必须创建类" javafx.scene.control.TreeTableView"的实例。这是创建JavaFXTreeTableView
的示例:
TreeTableView<Car> treeTableView = new TreeTableView<Car>();
本示例创建一个TreeTableView实例,该实例旨在显示Car对象。使用的Car
类如下所示:
public class Car { private String brand = null; private String model = null; public Car() { } public Car(String brand, String model) { this.brand = brand; this.model = model; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } }
将TreeTableColumn添加到TreeTableView
从本教程前面的屏幕快照中可以看到,JavaFXTreeTableView
组件在水平行中将其项目中的值显示为垂直列。第一列是树结构。其余的列是普通表列,它们显示第一列中显示的树状结构中各项的值。
为了让TreeTableView确实在列中显示这些值,必须将一个或者多个TreeTableColumn实例添加到TreeTableView中。这是在JavaFX TreeTableView中添加两个TreeTableColumn实例的示例:
TreeTableView<Car> treeTableView = new TreeTableView<Car>(); TreeTableColumn<Car, String> treeTableColumn1 = new TreeTableColumn<>("Brand"); TreeTableColumn<Car, String> treeTableColumn2 = new TreeTableColumn<>("Model"); treeTableColumn1.setCellValueFactory(new TreeItemPropertyValueFactory<>("brand")); treeTableColumn2.setCellValueFactory(new TreeItemPropertyValueFactory<>("model")); treeTableView.getColumns().add(treeTableColumn1); treeTableView.getColumns().add(treeTableColumn2);
将TreeItem添加到TreeTableView
为了使JavaFXTreeTableView
显示任何数据,我们必须向其中添加一个或者多个TreeItem
实例。这是将9个TreeItem对象添加到JavaFX TreeTableView中的示例:
TreeItem mercedes1 = new TreeItem(new Car("Mercedes", "SL500")); TreeItem mercedes2 = new TreeItem(new Car("Mercedes", "SL500 AMG")); TreeItem mercedes3 = new TreeItem(new Car("Mercedes", "CLA 200")); TreeItem mercedes = new TreeItem(new Car("Mercedes", "...")); mercedes.getChildren().add(mercedes1); mercedes.getChildren().add(mercedes2); TreeItem audi1 = new TreeItem(new Car("Audi", "A1")); TreeItem audi2 = new TreeItem(new Car("Audi", "A5")); TreeItem audi3 = new TreeItem(new Car("Audi", "A7")); TreeItem audi = new TreeItem(new Car("Audi", "...")); audi.getChildren().add(audi1); audi.getChildren().add(audi2); audi.getChildren().add(audi3); TreeItem cars = new TreeItem(new Car("Cars", "...")); cars.getChildren().add(audi); cars.getChildren().add(mercedes); treeTableView.setRoot(cars);
注意如何将TreeItem实例组织成一棵树,以" Cars"节点为根,然后是两个节点" Mercedes"和" Audi",然后在它们下面分别有三个TreeItem
实例,并具有具体的汽车模型节点。
注意最后一行是TreeTableViewsetRoot()
方法调用。正是这种方法调用在TreeTableView上设置TreeItem实例的树。