Следующий сценарий: Существуют строки для следующей таблицы/столбцов, которые имеют длинные строковые значения. Я выяснил, как решить проблему с оберткой этих длинных строковых значений, вызвав "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" в порядке, но "Эссен" - нет. Я попробовал "text.fontProperty(). Bind (fontProperty());", но это не помогло.
Кто-нибудь имеет представление о том, как получить правильный цвет шрифта при выборе строк?
Изменение: проблема решена.
Здесь небольшое различие шрифтов:
left: без text.getStyleClass().addAll("table-text", "text");
right: with text.getStyleClass().addAll("table-text", "text");
По умолчанию TableCell
использует Label
для отображения текста. В таблице стилей по умолчанию метка имеет свой -fx-text-fill
заданный как -fx-text-background-color
. Это значение - это искаженный цвет, который использует лестницу, чтобы текст был белым на темном фоне, черный на среднем фоне (45% <яркость <60%) и серый на светлых фонах. Чтобы сделать текст в вашем TableCell
тем же цветом, вам просто нужно установить -fx-fill
для текста на тот же -fx-fill
цвет. См. Код таблицы стилей по умолчанию (modena.css в Java 8 или 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;");
но лучше практиковать, чтобы разделить стиль на отдельную таблицу стилей.)
text.getStyleClass().addAll("table-text", "text");
)