Вы хотите расширить 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;}