ICEfacesのTreeコンポーネントで

ICEfacesのTreeコンポーネントを試してみました。
まずはVisual Web ICEfacesでTreeコンポーネントを貼り付けてそのまま実行。
よく分からないですが、何もしないのに沢山のフォルダができています。
com.icesoft.faces.component.jsfcl.data.DefaultTreeのコンストラクタで作られているようです。

public DefaultTree() {
	DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode();
	NodeUserObject rootObject = new NodeUserObject(rootTreeNode, this);
	rootTreeNode.setUserObject(rootObject);
	model = new DefaultTreeModel(rootTreeNode);

	for (int i = 0; i < 2; i++) {
		DefaultMutableTreeNode branchNode = new DefaultMutableTreeNode();
		NodeUserObject branchObject = new NodeUserObject(branchNode, this);
		branchNode.setUserObject(branchObject);
		rootTreeNode.add(branchNode);

		for (int k = 0; k < 1; k++) {
			DefaultMutableTreeNode subbranchNode = new DefaultMutableTreeNode();
			NodeUserObject subBranchObject = new NodeUserObject(
					subbranchNode, this);
			subbranchNode.setUserObject(subBranchObject);
			branchNode.add(subbranchNode);

			for (int l = 0; l < 1; l++) {
				DefaultMutableTreeNode subbranchNodeTwo = new DefaultMutableTreeNode();
				NodeUserObject subBranchObjectTwo = new NodeUserObject(
						subbranchNodeTwo, this);
				subbranchNodeTwo.setUserObject(subBranchObjectTwo);
				subbranchNode.add(subbranchNodeTwo);

				for (int m = 0; m < 3; m++) {
					DefaultMutableTreeNode subbranchNodeThree = new DefaultMutableTreeNode();
					NodeUserObject subBranchObjectThree = new NodeUserObject(
							subbranchNodeThree, this);
					subbranchNodeThree.setUserObject(subBranchObjectThree);
					subbranchNodeTwo.add(subbranchNodeThree);

				}
			}

		}
	}
}

で、com.icesoft.faces.component.jsfcl.data.NodeUserObjectのコンストラクタでTreeNodeの詳細を設定しています。

    public NodeUserObject(DefaultMutableTreeNode wrapper, DefaultTree treeBeanPointer) {
        super(wrapper);

        treeBean = treeBeanPointer;


        label = generateLabel();
        setLeafIcon("/xmlhttp/css/xp/css-images/tree_document.gif");
        setBranchContractedIcon("/xmlhttp/css/xp/css-images/tree_folder_close.gif");
        setBranchExpandedIcon("/xmlhttp/css/xp/css-images/tree_folder_open.gif");
        setText(label);
        setTooltip(nodeToolTip);
        setExpanded(true);
    }

うーん、この画像はcom.icesoft.faces.resource.css.imagesにあるのですが、このフォルダをWEBにデプロイする設定が見つからない・・・。Visual Web ICEfacesにすると設定されているのでしょうけど・・・。とりあえず気にしないことに。
それから、ちょっと気になることを発見。

	public void setSelectedNode(String selectedNode) {
		this.selectedNode = selectedNode;
	}

ノードをクリックしたときに選択したノードのラベルをセットするようになっています。ICEFacesのTreeデモでもそのようになっていて、わざわざ「private DefaultMutableTreeNode findTreeNode(String nodeId)」なんていうメソッドまで用意しています。そんな事をしなくてもこんな感じでもいいのではないかと思いやってみました。

    public void setSelectedNodeObject(NodeUserObject selectedNodeObject) {
        if (this.selectedNodeObject != null) this.selectedNodeObject.setBgcolor("none");
        this.selectedNodeObject = selectedNodeObject;
        this.selectedNodeObject.setBgcolor("red");
    }

テキストではなく、オブジェクトそのものを格納しています。例えば、選択したノードの背景を変えたい場合なんかはこちらの方が簡単にできます。この書き方では何か問題があるのかな?