首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultTreeModel和Wicket树: setAsksAllowsChildren不工作

DefaultTreeModel和Wicket树: setAsksAllowsChildren不工作
EN

Stack Overflow用户
提问于 2013-07-23 19:52:30
回答 4查看 846关注 0票数 1

就像这样:

代码语言:javascript
复制
PDMinterface pdmI = new PDMinterface(); 
DefaultMutabletreeNode rootTreeNode = pdmI.getDocTree();            //文档树根结点,由PDM接口提供
DefaultTreeModel treeModel = new DefaultTreeModel(rootTreeNode);
treeModel.setAsksAllowsChildren(true);

我确信folder5被设置为允许孩子:

代码语言:javascript
复制
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);
            }
        }
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-23 22:20:31

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

代码语言:javascript
复制
/**
 * 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类中发现了这个:

代码语言:javascript
复制
public boolean isLeaf()
{
    return children.size() == 0;
}

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

另一个想法是重写DefaultMutableTreeNode的isLeaf()方法,但如果在无法控制的地方调用它,可能会出现其他意想不到的问题……

这只是你如何做到这一点的一些见解...希望能对你有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2013-07-24 15:14:26

您使用的是哪个Wicket版本?旧的树实现在6.x中被弃用,在7.x中被删除,所以你应该使用org.apache.wicket.extensions.markup.html.repeater.tree包中的新实现-它不再基于Swing类。

票数 2
EN

Stack Overflow用户

发布于 2013-07-23 19:57:49

问题出在外部for循环中的线路if(i < 4){上。您允许该节点具有子节点,但没有为最后一个节点创建任何子节点。

编辑:你对空文件夹的判断是正确的,所以我的答案是错误的。在Swing中,这是预期的。当呈现树行时,绘制文件夹或文件图标的决定基于标志setAsksAllowsChildren。所以问题似乎出在Wicket的树组件上

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17809452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档