以下情景: 以下表/列有行,它们具有长字符串值。我想通过手动调用“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");
答案 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;");
但最好将样式分解为单独的样式表。)