有没有办法更改节点颜色并将其更改为斜体等?
3 回答
我认为这个线程会帮助你,即使那个提问者似乎比你要多一点。来自 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
将负责为您可视化对象的新状态:)
您想要扩展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;}
使用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()
在自定义链接的处理程序中手动调用。