我有一个 CheckBoxTreeView,它显示日志文件夹目录树,并允许用户选择在 TableView 中显示哪些目录树。 在程序运行时,日志文件/文件夹正在积极创建/更新,因此我正在侦听更新并向用户显示这些更新,但到目前为止我只能解决 CheckBoxTreeCell。
我想做的是更改 TreeCell 复选框边框和/或背景以指示项目更新。
基于这个问题和解决方案:从外部进程更新 CheckBoxTreeCell 样式我只是向 CheckBoxTreeCell 添加和删除样式:
private void updateCell(CheckBoxTreeCell<LogFile> cell) {
cell.getStyleClass().removeAll(Arrays.asList("logfile-created", "logfile-deleted",
"logfile-updated", "logfile-nochange"));
LogFile logfile = cell.getItem();
if (logfile != null) {
LogStateEnum state = logfile.getState();
// Update style class
switch (state) {
case CREATED:
cell.getStyleClass().add("logfile-created");
break;
case DELETED:
cell.getStyleClass().add("logfile-deleted");
break;
case UPDATED:
cell.getStyleClass().add("logfile-updated");
Services.getLogService().debug(THIS_CLASS, MARKER, "styles - [" + Arrays.toString(cell.getStyleClass().toArray()) + "]");
break;
default:
cell.getStyleClass().add("logfile-nochange");
Services.getLogService().debug(THIS_CLASS, MARKER, logfile + " has styles - [" + Arrays.toString(cell.getStyleClass().toArray()) + "]");
}
}
}
还有 CSS:
.root {
-default-text-color: rgb(204,204,204);
-default-text-entry-color: rgb(105,105,105);
-default-window-color: rgb(0,0,0);
}
.tree-cell {
-fx-background-color: -default-window-color;
-fx-text-fill: -default-text-color;
}
.tree-cell:selected {
-fx-background-color: -default-text-entry-color;
-fx-text-fill: -default-window-color;
}
.tree-cell:filled:hover {
-fx-background-color: -default-text-entry-color;
-fx-text-fill: -default-window-color;
}
.logfile-updated {
-fx-text-fill: green ;
}
.logfile-deleted {
-fx-text-fill: red ;
}
.logfile-created {
-fx-text-fill: yellow ;
}
.logfile-nochange {
-fx-text-fill: -default-text-color;
}
样式复选框的示例位于 modena.css。
对于像
-fx-text-fill
这样的非继承CSS样式,您需要将CSS样式规则应用于复选框,而不是单元格,例如
.logfile-created > .check-box {
-fx-text-fill: yellow;
}
只需要更改 CSS 文件,我认为你的 Java 代码应该没问题。
提问者在评论中确认,这种方法有效。