使用Text Class并选择行时,JavaFX TableColumn字体颜色错误

时间:2014-08-07 11:13:54

标签: java fonts javafx tableview tablecolumn

以下情景: 以下表/列有行,它们具有长字符串值。我想通过手动调用“setCellFactory”并将“text.wrappingWidthProperty()”绑定到列的宽度来解决如何通过包装这些长字符串值来解决问题。

这很好。

这是我正在谈论的代码段:

@FXML
  private TableView<Row> tableEssen;
@FXML
 private TableColumn<Row, String> columnEssen;
...
columnEssen.setCellFactory(new Callback<TableColumn<Row,String>, TableCell<Row,String>>() {
            @Override
            public TableCell<Row, String> call( TableColumn<Row, String> param) {
                 final TableCell<Row, String> cell = new TableCell<Row, String>() {
                      private Text text;
                      @Override
                      public void updateItem(String item, boolean empty) {
                           super.updateItem(item, empty);
                           if (!isEmpty()) {
                                text = new Text(item.toString());
                                text.wrappingWidthProperty().bind(getTableColumn().widthProperty());
                                text.fontProperty().bind(fontProperty());
                                setGraphic(text);
                           }
                      }
                 };
                 return cell;
            }
       });

现在我的下一个小问题是,所选行的字体颜色是黑色 - 它应该是白色的。 “Essen”列使用Text类,“Preis”是一个简单的字符串。 “Preis”栏目没问题,但“Essen”不是。 我试过“text.fontProperty()。bind(fontProperty());”,但这没有帮助。

enter image description here

有人知道如何在选择行时获得正确的字体颜色吗?

编辑:问题解决了。

这里的字体略有不同:

左:没有text.getStyleClass().addAll("table-text", "text");

右:text.getStyleClass().addAll("table-text", "text");

without line of code with line of code

1 个答案:

答案 0 :(得分:2)

默认TableCell使用Label来显示文字。在默认样式表中,标签的-fx-text-fill设置为-fx-text-background-color。该值是使用梯子的查找颜色,因此文本在深色背景上是白色,在中等背景上是黑色(45%&lt;亮度<60%)并且在浅色背景上是灰色。要使自定义TableCell中的文本具有相同的颜色,您只需将文本的-fx-fill属性设置为相同的查找颜色即可。请参阅默认样式表的代码(如果您仍在使用JavaFX 2.2,请使用Java 8中的modena.css或caspian.css),您可以从jfxrt.jar文件中提取该代码。

您可以按如下方式设置文本的正确颜色:

将样式类添加到Text

text = new Text(item.toString());
text.getStyleClass().add("table-text");

然后在外部样式表中执行

.table-text {
  -fx-fill : -fx-text-background-color ;
}

(您也可以在文字上设置内联样式:

text.setStyle("-fx-fill: -fx-text-background-color;");

但最好将样式分解为单独的样式表。)