JavaFX TreeTableView在行单元格中设置自定义节点

时间:2018-07-05 12:54:44

标签: javafx javafx-2 treetableview

我想创建一个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()方法显示按钮。为了指示该树项目是显示我自己的图形节点还是默认节点,我在表视图结构类(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中找到。

0 个答案:

没有答案