Colorize TreeView 的 Sub-item, sub-sub-item, sub-sub-sub-item
Colorize Sub-item, sub-sub-item, sub-sub-sub-item of TreeView
我正在制作一个显示字符串 TreeView 的程序。
当我制作 TreeView 时,有什么方法可以直接在 CSS?
中根据项目的级别为字符串 itens 着色
treeView.getStylesheets().add("style.css");
.tree-cell:sub-tree-item {
-fx-text-fill: red;
}
.tree-cell:sub-tree-item:sub-tree-item { /*Does exists something similar of this?? */
-fx-background-color: green ;
}
...
或者我必须制作标签
TreeItem treeNode1 = new TreeItem("");
Label lteste11=new Label("myLevelIs1");
lteste11.setTextFill(Color.RED);
treeNode1.setGraphic(lteste11);
TreeItem treeNode2 = new TreeItem("");
Label lteste22=new Label("myLevelIs2");
lteste22.setTextFill(Color.GREEN);
treeNode2.setGraphic(lteste22);
TreeItem treeNodeROOT = new TreeItem();
treeNodeROOT.getChildren().addAll(treeNode1, treeNode2);
treeView.setRoot(treeNodeROOT);
?还有别的办法吗?
您可以使用自定义单元格工厂根据深度添加样式类:
TreeView<String> tree = ... ;
tree.setCellFactory(tv -> new TreeCell<>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
getStyleClass().removeIf(s -> s.startsWith("depth"));
if (empty || item == null) {
setText("");
} else {
int depth = 0 ;
for (TreeItem<String> i = getTreeItem().getParent() ; i != null ; i = i.getParent()) {
depth++ ;
}
getStyleClass().add("depth"+depth);
setText(item);
}
}
});
然后在你的样式表中做,例如:
.tree-cell.depth1 {
-fx-text-fill: red ;
}
.tree-cell.depth2 {
-fx-background-color: green ;
}
你想支持多少深度。
我正在制作一个显示字符串 TreeView 的程序。 当我制作 TreeView 时,有什么方法可以直接在 CSS?
中根据项目的级别为字符串 itens 着色treeView.getStylesheets().add("style.css");
.tree-cell:sub-tree-item {
-fx-text-fill: red;
}
.tree-cell:sub-tree-item:sub-tree-item { /*Does exists something similar of this?? */
-fx-background-color: green ;
}
...
或者我必须制作标签
TreeItem treeNode1 = new TreeItem("");
Label lteste11=new Label("myLevelIs1");
lteste11.setTextFill(Color.RED);
treeNode1.setGraphic(lteste11);
TreeItem treeNode2 = new TreeItem("");
Label lteste22=new Label("myLevelIs2");
lteste22.setTextFill(Color.GREEN);
treeNode2.setGraphic(lteste22);
TreeItem treeNodeROOT = new TreeItem();
treeNodeROOT.getChildren().addAll(treeNode1, treeNode2);
treeView.setRoot(treeNodeROOT);
?还有别的办法吗?
您可以使用自定义单元格工厂根据深度添加样式类:
TreeView<String> tree = ... ;
tree.setCellFactory(tv -> new TreeCell<>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
getStyleClass().removeIf(s -> s.startsWith("depth"));
if (empty || item == null) {
setText("");
} else {
int depth = 0 ;
for (TreeItem<String> i = getTreeItem().getParent() ; i != null ; i = i.getParent()) {
depth++ ;
}
getStyleClass().add("depth"+depth);
setText(item);
}
}
});
然后在你的样式表中做,例如:
.tree-cell.depth1 {
-fx-text-fill: red ;
}
.tree-cell.depth2 {
-fx-background-color: green ;
}
你想支持多少深度。