繁体   English   中英

JavaFX TreeTableView自定义TreeCell与控件

[英]JavaFX TreeTableView custom TreeCell with controls

我是JavaFX 8的新手,并尝试在第二列和第三列中使用一些jfxtras控件实现TreeTableView。 因此,我使用自定义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列的节点(从POJO中显示String信息)不起作用。 因此,例如,如果我折叠整棵树,第三列仍显示所有ColorPickers。

那么,使列“同步”还需要什么呢?

谢谢!!

当单元格显示的项目更改时,将调用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;
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM