1

以下场景:以下表格/列的行,具有长字符串值。我想出了如何通过手动调用“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());”,但这没有帮助。

在此处输入图像描述

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

编辑:问题解决了。

这里的字体略有不同:

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

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

没有代码行 用代码行

4

1 回答 1

2

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

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

于 2014-08-07T12:28:35.833 回答