JavaFX、TableView和选定行的字体颜色

JavaFX、TableView和选定行的字体颜色,javafx,tableview,Javafx,Tableview,我得到的TableView如下所示: TableView tableView = (TableView) ((AnchorPane) node).getChildren().get(0); 用如下数据填充它 tableView.setItems(FXCollections.observableList(vehicles)); 这部分没问题。但是,我想在tableView中更改当前行的字体属性,但我不知道如何做 我不想设置tableView.getSelectionModel().setCel

我得到的TableView如下所示:

TableView tableView = (TableView) ((AnchorPane) node).getChildren().get(0);
用如下数据填充它

tableView.setItems(FXCollections.observableList(vehicles));
这部分没问题。但是,我想在tableView中更改当前行的字体属性,但我不知道如何做

我不想设置
tableView.getSelectionModel().setCellSelectionEnabled(true)因为我想显示整行的选择,而不是单个单元格的选择

我尝试在TableRow和Tabliew上应用一些css样式,但没有成功


是否有任何方法可以更改TableView中当前选定行的字体属性

Tableview css样式是微妙而复杂的

解决方案

转到默认JavaFX控件css的源代码,并将所有
.table view
部分复制到您自己的用户样式表中,这些部分包含一个
:selected
psuedo类

从复制的每个css选择器部分中删除默认属性设置规则,并将其替换为要应用于选定行的css

由于有大量的
:选定的
规则,您可能需要在几个地方复制相同的属性设置(类似于默认属性值的定义方式)

背景资源

各版本的默认样式表为:

  • JavaFX2.2=>
  • Java 8=>
如果您感到困惑,请咨询和

快速换色修复

请注意,如果只需设置选择栏文本的填充颜色,则可以使用单个语句使用自己的常量替代默认常量颜色:

.root { -fx-selection-bar-text: firebrick; }

只要用你想要的任何颜色代替耐火砖就行了。类似地
-fx选择栏:午夜蓝可用于更改文本背景的颜色

此CSS规则可能有效:

 #mytable .table-cell {
    -fx-text-fill:red ;
    -fx-border-color: none;
 }

  #mytable .table-cell:hover {
    -fx-text-fill: rgb(103,183,89) ;
    -fx-border-color: none;
 }

感谢jewelsea,您使用-fx选择栏文本和-fx选择栏的想法解决了我的问题。但是,如果您使用自定义cellfactory并修改tablecell css,您也需要为该tablecell重新指定样式(原因未知)例如,在tablecellfactory中修改tablecell以显示与:相同的选择栏,并将这些样式添加到tableview-#MainanCorpane{-fx选择栏文本:白色;}#MainanCorpane的容器中。表格视图:聚焦。表格行单元格:填充:选定。表格单元格{-fx text fill:-fx选择栏text;-fx背景色:-fx选择栏;}@jewelsea,在与JavaFX CSS斗争了很长一段时间后,我终于接受了你的建议:“转到源代码…”。这是必须的,也是处理JavaFX的复杂性和与CSS的偏差的唯一方法。谢谢。