定制单元格在gwt CellTree中

时间:2013-01-29 12:15:12

标签: gwt

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

这个单元格将是:

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

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

我试过了:

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

(2)CompositeCell。这里的要点是altought我得到可点击的图像在鼠标点击响应,我无法得到一个实现正确选择必须显示哪种类型的细胞(基于它是否有孩子,显示TetxCell或带图标的自定义单元格)。

有人可以解释我是如何实现这一目标的吗?到目前为止我的代码是:

public NodeInfo getNodeInfo(T value){

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(Object value)   {

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

}

1 个答案:

答案 0 :(得分:0)

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

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