3

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

.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任何特殊状态的变化。

我究竟做错了什么?

4

2 回答 2

1

!important由于您的 css 规则与默认 caspian 或 modena 样式表的 css 规则的特殊性,可能需要它(尽管我的 css 技能在评估这一点方面受到限制)。

SceneBuilder 1.1 有一个css 分析器,可以帮助确定哪些 css 规则和属性被激活。一般来说,这可能有助于调试 css 规则激活,但不幸的是,在这种特定情况下并没有太大帮助,因为您无法通过 SceneBuilder 1.1 设置表格单元格的样式。

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

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

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

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

于 2013-08-23T07:51:48.540 回答
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! */
}
于 2013-08-23T17:44:07.000 回答