我在网络应用中使用Wicket的Tree组件。但是空文件夹以文件方式显示。 像这样:
Bellow是我使用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);
}
}
}
任何人都可以提供帮助??
答案 0 :(得分:2)
您使用的是哪种Wicket版本?旧的树实现在6.x中已弃用,并在7.x中删除,因此您应该在包org.apache.wicket.extensions.markup.html.repeater.tree中使用新的实现 - 它不再基于Swing类。
答案 1 :(得分:1)
为了比我的评论更有帮助,我在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()方法,但如果在无法控制的地方调用它,则可能会遇到其他意外问题...
这只是对如何做到这一点的一些见解......希望它有用......
答案 2 :(得分:0)
问题在于外部if(i < 4){
循环中的行for
。您允许节点拥有子节点,但不为最后一个节点创建任何子节点。
编辑:你对空文件夹是正确的,所以我的回答是不正确的。在Swing中,这可以按预期工作。呈现树行时,绘制文件夹或文件图标的决定基于标记setAsksAllowsChildren
。所以问题似乎出现在Wicket的树组件
答案 3 :(得分:0)
您可以覆盖Folder.getStyleClass以返回所需的Icon。我有这样的事情:
@Override
protected String getStyleClass() {
String styleClass;
if (isFolder(getModelObject()))
{
if (tree.getState(matter) == State.EXPANDED)
{
styleClass = getOpenStyleClass();
} else {
styleClass = getClosedStyleClass();
}
} else {
styleClass = getOtherStyleClass(matter);
}
if (isSelected()) {
styleClass += " " + getSelectedStyleClass();
}
return styleClass;
}
您的isFolder()实现可能会有所不同。