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实例的树。

