0

単純なテキストセルで動作するCellTreeがあります。ここで、ツリーノードごとに、葉であるかどうかに応じて異なる種類のセルが必要です。

このセルは次のようになります。

(1)ノードがリーフの場合(子がない場合):TextCell

(2)ノードがルートの場合(> =子があります):。-リーフと同じ文字列を表示する必要があります-+1クリック可能な画像(これはノードの名前の名前を変更するために使用されるアイコンです)。-+ 1つのクリック可能な画像(これはノードを削除するために使用されるアイコンです)。

私は試しました:

(1)AbstractCellを拡張するカスタムセル。ここでのポイントは、クリック可能な画像をマウスクリックに応答させることができないということです。したがって、アクションを実行することはできません(名前の編集またはノードの削除)。

(2)CompositeCell。ここでのポイントは、マウスクリックで応答するクリック可能な画像を取得したとしても、表示する必要のあるセルの種類を正しく選択する実装を取得できないことです(子があるかどうかに基づいて、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();

}

4

1 に答える 1

0

The cell won't depend on the value it'll display, but on the value of the parent node.

So, you'll need a generic cell that supports both renderings/behaviors and switches between them based on the value it's asked to display: for a value that you can tell is a leaf, then only render text, otherwise also render the images/buttons (note you can also render the same HTML –to make it possible/easier to use a CompositeCell– but switch visibility of the images/buttons using CSS (class=xxx rendered on a container element).

于 2013-01-29T13:30:08.700 に答える