我正在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()方法,但是如果在无法控制的地方调用它,则可能会遇到其他意外问题。
这只是您如何实现的一些见解...希望对您有所帮助...