Есть четыре метода CheckBoxTreeTableCell.forTreeTableColumn
. Все они ожидают обратного вызова, являющегося TreeTableColumn
типа ObservableValue<Boolean>
или просто TreeTableColumn
типа Boolean
.
В последнем случае, поскольку вы уже указали столбец, когда метод 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;
}
}