0

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

4

3 回答 3

0

我认为这个线程会帮助你,即使那个提问者似乎比你要多一点。来自 Edvin 的回复:

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

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

...

您需要为AbstractBehaviour每个项目添加一个。该onComponentTag()方法将在组件渲染之前运行,因此您可以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将负责为您可视化对象的新状态:)

于 2011-04-06T15:46:41.303 回答
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;}
于 2011-04-12T20:58:12.017 回答
0

使用LinkTree(在 Wicket 6.21 或更早版本中已弃用)您可以覆盖newNodeComponent从头开始构建组件的方法:

@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()在自定义链接的处理程序中手动调用。

于 2015-09-09T15:03:05.053 回答