JavaFX TableColumn неправильный цвет шрифта при использовании Text Class и выборе строк

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" в порядке, но "Эссен" - нет. Я попробовал "text.fontProperty(). Bind (fontProperty());", но это не помогло.

Изображение 174551

Кто-нибудь имеет представление о том, как получить правильный цвет шрифта при выборе строк?

Изменение: проблема решена.

Здесь небольшое различие шрифтов:

left: без text.getStyleClass().addAll("table-text", "text");

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

Изображение 174551Изображение 174551

Теги:
javafx
tableview
fonts
tablecolumn

1 ответ

1
Лучший ответ

По умолчанию 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;");

но лучше практиковать, чтобы разделить стиль на отдельную таблицу стилей.)

  • 0
    Здорово, спасибо за ответ! Это работает! Правильно ли, что: -fx-fill является свойством для цвета шрифта, а -fx-text-background-color - фоновым цветом ячейки? Теперь, когда цвет шрифта обоих столбцов белый, я вижу, что есть еще различие в шрифтах (толщина). Знаете ли вы, как убедиться, что у меня точно такой же шрифт?
  • 0
    Добавлено объяснение. Я не вижу разницы, на которую вы ссылаетесь: какую версию JavaFX вы используете? Может быть, попробуйте добавить класс стиля "текст" к текстовому узлу, а также свой собственный ( text.getStyleClass().addAll("table-text", "text"); )
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню