JavaFX 17:更改特定 CheckBoxTreeCell 实例的复选框样式

问题描述 投票:0回答:1

我有一个 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;
}
css javafx
1个回答
0
投票

样式复选框的示例位于 modena.css

对于像

-fx-text-fill
这样的非继承CSS样式,您需要将CSS样式规则应用于复选框,而不是单元格,例如

.logfile-created > .check-box { 
    -fx-text-fill: yellow; 
} 

只需要更改 CSS 文件,我认为你的 Java 代码应该没问题。

提问者在评论中确认,这种方法有效。

© www.soinside.com 2019 - 2024. All rights reserved.