更改Wicket树节点颜色,字体等

时间:2011-04-06 15:22:39

标签: fonts colors wicket treenode

有没有办法更改节点颜色并将其更改为斜体等?

3 个答案:

答案 0 :(得分:0)

我认为this thread会对你有所帮助,即使那位提问者似乎在寻找比你更多的东西。来自Edvin的回复:

  

如果您覆盖populateTreeItem()方法,则可以向该项添加AbstractBehaviour并覆盖onComponentTag方法。从那里你可以做到

tag.put("class", "yourValue")
     

...

     

您需要为每个项目添加AbstractBehaviouronComponentTag()方法将在呈现组件之前运行,因此您可以使用userObject方法检查tag.put()的状态并添加/删除类:)

     

此外,如果要在单击项目时执行操作,则可以查看树的onNodeLinkClicked()方法。 onNodeLinkClicked()可让您访问AjaxRequestTarget,因此您还可以执行任意JavaScript代码,如下所示:

protected void onNodeLinkClicked(AjaxRequestTarget target, TreeNode node) {
    MyObject myObject = (MyObject)
      ((DefaultMutableTreeNode) node).getUserObject();
    if (myObject.getMyState())
        target.appendJavascript("targetTheComponentWithAJavascriptMethod(" +
          getId() + ");");
}
     

或者,您可以更改userObject方法中onNodeLinkClicked的状态,并将其添加到AjaxRequestTarget。然后,您的AbstractBehaviour将为您显示对象的新状态:

答案 1 :(得分:0)

您希望扩展TreeTable,然后覆盖getCss()以更改字体和文字或背景颜色。如果要更改要覆盖getNodeIcon()的实际节点图标的颜色,并为您自己的PNG文件添加资源。

public abstract class MyTreeTable extends TreeTable {
    private static ResourceReference CSS = new CompressedResourceReference(
        MyTreeTable.class, "TreeTable.css");
    private static ResourceReference documentIcon = new CompressedResourceReference(
        MyTreeTable.class, "Icon_Document.png");
    private static ResourceReference folderIcon = new CompressedResourceReference(
        MyTreeTable.class, "Icon_Folder.png");

    public MyTreeTable(String id, IColumn[] columns) {
        super(id, columns);
    }

    @Override
    protected ResourceReference getCSS() {
        return CSS;
    }

    @Override
    protected ResourceReference getNodeIcon(TreeNode node) {
        if (node.isLeaf() == true) {
            return documentIcon;
        } else {
            return folderIcon;
        }
    }
}

这个特定组件的CSS非常挑剔,因为它们对连接树的所有行使用单个图像和图像偏移,所以我建议复制它们的整个CSS文件(你可以从源文件中获取它)然后调整它。或者,如果您不想进行大量更改,您可能根本不想覆盖getCSS(),而是在构造函数中添加CSS资源。

真正超级蹩脚的部分是TreeTable在每个表的顶部插入一个不可见的div,因此:first-child伪类不能用于选择你的项目,或者至少,我似乎无法使其发挥作用。因此,您仍需要覆盖populateTreeItem()。类似的东西:

boolean first = true;
@Override
protected void populateTreeItem(WebMarkupContainer container, int level) {
    super.populateItem(container, level);
    if(first) {
        container.add(new SimpleAttributeModifer("class", "first"));
        first = false;
    }
}

然后在你的CSS中

.first {font-color: red; font-style: italic;}

答案 2 :(得分:0)

使用newNodeComponent(在Wicket 6.21或更早版本中已弃用),您可以覆盖@Override protected Component newNodeComponent(String id, IModel<Object> model) { Object node = model.getObject(); if (node instanceof FolderNode) { FolderNode folderNode = (FolderNode)node; return new Label(id, folderNode.getLabel()); } else if (node instanceof FileNode) { ... } else if ... else { return null; } } 方法从头开始构建组件:

LinkIconPanel

注意:原始实现使用自动调用的LinkTree#onNodeLinkClicked()处理程序构建onNodeLinkClicked()。要保留此功能,您必须在自定义链接的处理程序中手动调用GMSMapView