JavaFX TableView:无法覆盖'-fx-text-fill'!

时间:2013-08-22 20:23:54

标签: javafx-2 tableview

在JavaFX2.2上,我创建了自己的样式类来表示包含无效数据的表格单元格。但我的样式类似乎无法覆盖-fx-text-fillhoverselected状态中的focused。这是我的风格课:

.invalid-table-cell {
    -fx-text-fill: red;
}

.invalid-table-cell:hover {
    -fx-background-color: salmon;
    -fx-text-fill: blue;  /* No worky */
}

.invalid-table-cell:selected {
    -fx-background-color: purple;
    -fx-text-fill: orchid;  /* No worky */
}

.invalid-table-cell:focused:hover {
    -fx-background-color: red;
    -fx-text-fill: green;  /* No worky */
}

当我的应用运行时,我可以看到-fx-background-color中的更改,但我发现-fx-text-fill在任何特殊状态下都没有变化。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

由于specificity of your css rules与默认caspian或Modena样式表的css规则相比,可能需要

!important(尽管我的css技能在评估此方面受到限制)。

SceneBuilder 1.1有一个css analyzer,可以帮助确定正在激活的css规则和属性。这可能有助于一般调试css规则激活,但遗憾的是,在这个特定情况下没有多大帮助,因为你无法通过SceneBuilder 1.1在表格单元格上设置样式。

一种解决方法是从modena或caspian css复制所有表视图css规则(不幸的是它们有很多)并将规则放在用户样式表中。将样式选择元素.invalid-table-cell添加到用户样式表中的每个表css规则中,并根据需要修改规则以实现所需的外观。这将确保您的规则集具有正确的特异性级别,以覆盖默认规则。不幸的是,这是一个非常艰巨的过程,也许你的!important覆盖可能是一个更好的解决方案。

自定义样式的一种稍微简单的方法是覆盖预定义的常量,例如下面的内容(我没有尝试过,只是演示了一个原则,因为确切的选择器和所需的规则可能不同):

.invalid-table-cell {
    -fx-selection-bar-text: goldenrod;
}

尽管使用-fx-text-fill: -fx-selection-bar-text;定义了许多默认表格单元格样式,但只需将此值设置为适当的值即可覆盖所有这些默认表格单元格样式。但它会将它们全部覆盖到相同的值,因此如果您需要不同的css伪状态的值,就像您的问题一样,那么您需要明确定义这些规则,如前所述。

答案 1 :(得分:0)

根据jewelsea的建议,我增加了CSS规则的特异性,以匹配capsian.css中相应规则的特异性。因为我很好奇,所以增加了我自己的规则增量的特异性,并发现在我的情况下,任何不太具体的规则都不适用。

.table-view:cell-selection .table-row-cell:filled .invalid-table-cell:hover {
    /* Works! */
}

.table-view:focused .table-row-cell:filled .invalid-table-cell:selected:focused {
    /* Works! */
}

.table-view:focused .table-row-cell:filled .invalid-table-cell:focused:selected:hover {
    /* Works! */
}