JavaFX TreeTableView пользовательский TreeCell с элементами управления
Я новичок в JavaFX 8 и попытался реализовать TreeTableView с некоторыми элементами управления jfxtras во втором и третьем столбце. Поэтому я настроил фабрики ячеек этих столбцов с помощью пользовательских TreeCells, например, так:
col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() {
@Override
public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) {
TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() {
private ColorPicker colorPicker = new ColorPicker();
@Override
protected void updateItem(String t, boolean bln) {
super.updateItem(t, bln);
setGraphic(colorPicker);
}
};
return cell;
}
});
Теперь я могу видеть ColorPickers и использовать их, но столбец почему-то не реагирует на расширение или свертывание узлов столбца 1 (который показывает информацию String из POJO). Так, например, если я сверну все дерево, в третьем столбце по-прежнему будут отображаться все ColorPickers.
Итак, что еще нужно для синхронизации столбцов?
Спасибо!!
1 ответ
Когда элемент, отображаемый в ячейке, изменяется, updateItem(...)
метод вызывается. Если ячейка пуста (например, потому что пользователь свернул ячейки выше), второй параметр будет true
; Вы должны проверить это и сбросить графику.
Так:
col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() {
@Override
public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) {
TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() {
private ColorPicker colorPicker = new ColorPicker();
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
setGraphic(colorPicker);
}
}
};
return cell;
}
});