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

JavaFX TableView change selected cell colour

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

这是我的 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;
}

对于 ListView,一切都完美无缺:文本以正确的颜色显示,当单元格被选中时,文本变为白色,背景填充了正确的颜色。

我遇到的是 TableView 问题。未选中时,单元格中的文本显示为所选颜色,但选中单元格时,背景填充为所选 table 单元格背景的默认 JavaFX 颜色,文本颜色保持为 #F5AD11(它不会变为白色).

使用 .significantDataCell class 的 TableCells 也会发生同样的情况。单元格以黄色背景和黑色文本正确显示,但选中时没有任何变化,这次没有事件背景。

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

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

.table-row-cell:selected .table-cell {
    /* style definitions */
}

或者在您的场景中

.table-row-cell:selected .tissue-cell {
    -fx-background-color: #F5AD11;
    -fx-text-fill: white;
}

等等

如果您允许 table 使用单元格选择,通过调用

myTableView.setCellSelectionEnabled(true);

然后单个单元格在单击鼠标(等)时被选中,因此您的原始 CSS 将起作用。