JavaFX TreeTableView

时间:2020-01-09 10:36:43  来源:igfitidea点击:

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