JavaFX TableView更改选定的单元格颜色

Igo*_*ese 2 css javafx selection tableview tablecell

我有一个JavaFX TableView和ListView,它们都使用自定义单元格工厂。特别是我已经重写了updateItem方法,以便根据单元格值绑定特定的CSS类。

这是我的CSS文件的一部分:

.tissueCell {
    -fx-text-fill: #F5AD11;
}

.tissueCell:selected {
    -fx-background-color: #F5AD11;
    -fx-text-fill: white;
}

.significantDataCell {
    -fx-background-color: yellow;
    -fx-text-fill: black;
}

.significantDataCell:selected {
    -fx-background-color: white;
    -fx-text-fill: black;
}
Run Code Online (Sandbox Code Playgroud)

对于ListView,一切都可以正常工作:以正确的颜色显示文本,并且在选择单元格时,文本变为白色,而背景则以正确的颜色填充。

我遇到了TableView问题。取消选择时,单元格中的文本将以选定的颜色显示,但是,当选定单元格时,背景将使用选定表单元格背景的默认JavaFX颜色填充,并且文本颜色将保持为#F5AD11(不会变为白色)。

使用.significantDataCell类的TableCell也会发生相同的情况。单元格以黄色背景和黑色文本正确显示,但是选择时没有任何变化,这次不会作为背景。

有任何想法吗?我做了很多研究,但找不到任何可行的解决方案。

Jam*_*s_D 5

默认情况下,TableViews不允许选择单个单元格,但允许选择行。因此,选择器.table-cell:selected在默认选择模式下从不匹配任何单元格。在这种情况下,您需要

.table-row-cell:selected .table-cell {
    /* style definitions */
}
Run Code Online (Sandbox Code Playgroud)

或您的情况

.table-row-cell:selected .tissue-cell {
    -fx-background-color: #F5AD11;
    -fx-text-fill: white;
}
Run Code Online (Sandbox Code Playgroud)

等等

如果允许表使用单元格选择,请调用

myTableView.setCellSelectionEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后通过单击鼠标右键(例如)选择单个单元格,这样您的原始CSS就可以使用。