有四种方法CheckBoxTreeTableCell.forTreeTableColumn
。他们都期待回调,即ObservableValue<Boolean>
类型的TreeTableColumn
,或Boolean
类型的TreeTableColumn
。
在最后一种情况下,由于您已经提供了该列,因此在为给定索引调用updateItem
方法来呈现复选框时,会在该位置找到其选定状态。
虽然在与回调的方法中,发现对于给定的索引所选择的状态下,call
该索引制成。
这是这两种情况下很简单的用例。你可以看到回调如何使用索引进入收集和检索状态:
private final ObservableList<Person> data = FXCollections.observableArrayList(
new Person("Staff",false),
new Person("John",false),
new Person("Greg",true));
@Override
public void start(Stage primaryStage) {
TreeItem<Person> rootTree = new TreeItem<>(data(0));
rootTree.setExpanded(true);
data.stream().skip(1).forEach(person->rootTree.getChildren().add(new TreeItem<>(person)));
TreeTableView<Person> table=new TreeTableView<>(rootTree);
TreeTableColumn<Person,String> columnName=new TreeTableColumn<>("Name");
columnName.setCellValueFactory(cellData -> cellData.getValue().getValue().nameProperty());
columnName.setPrefWidth(100);
TreeTableColumn<Person,Boolean> columnWeight=new TreeTableColumn<>("Overweight");
// case TreeTableColumn (uncomment to run)
// columnWeight.setCellFactory(CheckBoxTreeTableCell.forTreeTableColumn(columnWeight));
// case Callback:
columnWeight.setCellFactory(
CheckBoxTreeTableCell.forTreeTableColumn(
(Integer param) -> data.get(param).overWeightProperty()));
columnWeight.setCellValueFactory(cellData -> cellData.getValue().getValue().overWeightProperty());
columnWeight.setPrefWidth(150);
table.getColumns().addAll(columnName, columnWeight);
table.setEditable(true);
Scene scene = new Scene(table, 400, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
其中:
private class Person {
public Person(String name, boolean overWeight) {
this.name.set(name);
this.overWeight.set(overWeight);
}
private final StringProperty name = new SimpleStringProperty();
public String getName() {
return name.get();
}
public void setName(String value) {
name.set(value);
}
public StringProperty nameProperty() {
return name;
}
private final BooleanProperty overWeight = new SimpleBooleanProperty();
public boolean isOverWeight() {
return overWeight.get();
}
public void setOverWeight(boolean value) {
overWeight.set(value);
}
public BooleanProperty overWeightProperty() {
return overWeight;
}
}