有没有办法更改节点颜色并将其更改为斜体等?
答案 0 :(得分:0)
我认为this thread会对你有所帮助,即使那位提问者似乎在寻找比你更多的东西。来自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
将为您显示对象的新状态:
答案 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
。