我正在Web应用程序中使用Wicket的Tree组件。但是空文件夹以文件方式显示。
像这样:


贝娄是我使用DefaultTreeModel和Tree的地方:

PDMinterface pdmI = new PDMinterface();
DefaultMutabletreeNode rootTreeNode = pdmI.getDocTree();            //文档树根结点,由PDM接口提供
DefaultTreeModel treeModel = new DefaultTreeModel(rootTreeNode);
treeModel.setAsksAllowsChildren(true);


并且我确定folder5设置为允许孩子:

public DefaultMutableTreeNode getDocTree(){
    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
    root.setAllowsChildren(true);
    FolderNode rootFolder = new FolderNode(0, "root", "Jiajun", true);
    root.setUserObject(rootFolder);

    for(int i=0; i < 5; i++){
        DefaultMutableTreeNode newnode = new DefaultMutableTreeNode();
        newnode.setAllowsChildren(true);
        FolderNode newFolder = new FolderNode(i+1, "Folder" + Integer.toString(i+1), "Jiajun", false);
        newnode.setUserObject(newFolder);
        root.add(newnode);
        if(i < 4){
            for(int j=0; j < 5; j++){
                DefaultMutableTreeNode newdocNode = new DefaultMutableTreeNode();
                newdocNode.setAllowsChildren(false);
                DocNode newDoc = new DocNode(10*(i+1) + j, "Document" + Integer.toString(10*(i+1)+j), "Jiajun");
                newdocNode.setUserObject(newDoc);
                newnode.add(newdocNode);
            }
        }
    }

最佳答案

为了比在评论中更有用,我在AbstractTreeClass中找到了以下代码,该代码将控制它分配给节点的图像:

/**
 * Returns the resource reference for icon of specified tree node.
 *
 * @param node
 *            The node
 * @return The package resource reference
 */
protected ResourceReference getNodeIcon(TreeNode node)
{
    if (node.isLeaf() == true)
    {
        return getItem();
    }
    else
    {
        if (isNodeExpanded(node))
        {
            return getFolderOpen();
        }
        else
        {
            return getFolderClosed();
        }
    }
}


因此,整个问题涉及isLeaf()方法返回什么。我在DefaultMutableTreeNode类中找到了它:

public boolean isLeaf()
{
    return children.size() == 0;
}


因此,似乎您的组合会将没有子级的所有元素都视为叶子而不是文件夹。也许您可以使用getAllowsChildren覆盖getNodeIcon方法,并进行必要的类型调整...

另一个想法是覆盖DefaultMutableTreeNode的isLeaf()方法,但是如果在无法控制的地方调用它,则可能会遇到其他意外问题。

这只是您如何实现的一些见解...希望对您有所帮助...

08-05 13:06