【问题标题】:JavaFX TreeTableView custom TreeCell with controlsJavaFX TreeTableView 自定义 TreeCell 与控件
【发布时间】:2015-07-08 13:14:15
【问题描述】:

我是 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 中的字符串信息)没有反应。所以例如如果我折叠整个树,第三列仍然显示所有颜色选择器。

那么还需要什么才能让列“同步”?

谢谢!!

【问题讨论】:

  • 我不希望 JFXtras 控件具有特殊的实现以在表格中呈现。恕我直言,TreeViewTable 应该负责隐藏或显示(其内容)单元格。
  • 实际上我为我的帖子选择了错误的控件 - ColorPicker 不是来自 jfxtras。但它是一样的,例如使用 LocalTimeTextField 控件。所以你的意思是 TreeTableView 只是不能处理控件?或者还有什么我可以尝试的..?
  • 它可以很好地处理这个问题:问题是您告诉所有单元格(甚至是空单元格)使用控件作为其图形。仅当单元格非空时才需要专门设置图形。查看答案...

标签: java javafx treetableview jfxtras treecell


【解决方案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;
        }
    });

【讨论】:

  • 好的,谢谢!这解决了空单元格的问题!但是当我做一些折叠/展开时,颜色选择器没有出现在正确的行中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多