我想创建一个treetableview,它可以为每个树项显示一个子树,其中一行包含自定义节点(在本例中为一个按钮) .
In the end i want to make it look like that.
为了实现这一点,我可能需要一个自定义行工厂 .
//set custom row factory
treeTableView.setRowFactory(new Callback<TreeTableView<Struct>, TreeTableRow<Struct>>() {
@Override
public TreeTableRow<Struct> call(TreeTableView<Struct> param) {
return new TreeTableRow<Struct>(){
@Override
protected void updateItem(Struct item, boolean empty) {
super.updateItem(item, empty);
//check if row has values
if (!empty) {
//override the row cell graphics if boolean is set
if (item.isCustomRow()) {
setGraphic(new StackPane(new Button("Button")));
}
} else {
setGraphic(null);
}
}
};
}
});
我的想法是覆盖updateItem()方法并使用setGraphic()方法显示按钮 . 为了表明树项是显示我自己的图形节点还是默认,我向我的tableview结构类(Struct)添加了一个布尔值 .
//Struct contains treetable data
class Struct {
...
//the boolean defines if the row graphics should be overridden
Boolean customRow;
...
public Boolean isCustomRow() {
return customRow;
}}
我得到的结果你能看到here . 我看起来像行内的空列单元格阻塞了我自己的节点 .
我怀疑我还需要一个自定义TreeTableRowSkin,但我没有找到任何示例如何实现它 . 有没有人可以帮我解决这个问题?
完整的代码示例可以在here找到 .