【问题标题】:Custom cell in gwt CellTreegwt CellTree 中的自定义单元格
【发布时间】:2013-01-13 00:11:22
【问题描述】:

我有一个使用简单文本单元格的 CellTree。 现在我想要,对于每个树节点,根据它是否是叶子,使用不同类型的单元格。

此单元格将是:

(1) 如果节点是叶子(没有子节点):TextCell

(2) 如果节点是根节点(它有 >= 子节点):。 - 它必须显示与叶子相同的字符串 - + 1 个可点击的图像(这是一个用于重命名节点名称的图标)。 - + 1 个可点击的图片(这是一个用于移除节点的图标)。

我试过了:

(1) 自定义单元格,扩展 AbstractCell。这里的重点是我无法让可点击的图像响应鼠标点击。因此无法执行任何操作(编辑名称或删除节点)。

(2) 复合单元。这里的重点是虽然我得到了可点击的图像以响应鼠标点击,但我无法获得正确选择必须显示哪种单元格的实现(基于它是否有子单元,显示 TetxCell 或带有图标的自定义单元格)。

有人能解释一下我是如何做到这一点的吗?到目前为止我的代码是:

公共节点信息 getNodeInfo(T 值) {

if (value == null) {
  return new DefaultNodeInfo<CellTreeNode>(treeData.getDataProvider(), new IconCell(!isLeaf(value)),
      selectionModel, null);
}
else if (value instanceof CellTreeNode) {
  CellTreeNode node = (CellTreeNode) value;

  //data provider for this cell
  ListDataProvider<CellTreeNode> nodeDataProvider = new ListDataProvider<CellTreeNode>(node.getChildren());

  IconCell nodeCell = new IconCell(this, node, !isLeaf(node));

  // add a reference to the visual representation of the element
  node.setCell(nodeCell);

  return new DefaultNodeInfo<CellTreeNode>(nodeDataProvider, nodeCell,
      selectionModel, null);
}
// Unhandled type.
String type = value.getClass().getName();
throw new IllegalArgumentException(
    "[CellLargeTreeListBox] Unsupported object type: " + type);

}

// 检查指定的值是否代表叶子节点。叶节点不能 // 打开。 public boolean isLeaf(对象值) {

if (value == null) return false;
CellTreeNode node = (CellTreeNode) value;
return value instanceof CellTreeNode && !node.isRoot();

}

【问题讨论】:

    标签: gwt


    【解决方案1】:

    单元格不依赖于它将显示的值,而是依赖于 父节点 节点的值。

    因此,您需要一个支持渲染/行为的通用单元格,并根据要求显示的值在它们之间切换:对于您可以判断为叶子的值,然后只渲染文本,否则也渲染图像/按钮(请注意,您也可以呈现相同的 HTML——以使使用CompositeCell 成为可能/更容易——但使用 CSS 切换图像/按钮的可见性(class=xxx 呈现在容器元素上)。

    【讨论】:

    • 谢谢托马斯!最后,对于那些我不想显示的图标,我使用了带有 display:none 属性的 div。我没有尝试使用样式......并且是迄今为止最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2012-07-01
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多