Javafx Как не применять стиль CSS к метке

в моем графическом интерфейсе Java у меня около 50 меток. Все они будут отформатированы с использованием стиля CSS. Но есть 5, для которых я хочу изменить цвет шрифта с помощью ColorPicker следующим образом:

Color ch = lineCommentColorPicker.getValue();
if (ch != null) {
    lineCommentColorLabel.setTextFill(ch);
}

Мой вопрос. Как я могу избежать того, что цвет, который я установил с помощью метода setTextFill, будет снова перезаписан правилами стиля CSS, определенными для класса «.label»

.label {
    -fx-text-fill: black;
    -fx-font-weight: bold;
    -fx-font-size: 12;
}

person Guido    schedule 17.01.2015    source источник


Ответы (2)


Вы можете удалить стиль метки вместе с

lineCommentColorLabel.getStyleClass().remove("label");

и применить соответствующие стили. Или вы можете добавить класс стиля к другим меткам, кроме тех, которые вы хотите раскрасить вручную, например:

.myclass
{
    -fx-text-fill: red;
}

и

lineCommentColorLabel.getStyleClass().add("myclass");
person Roland    schedule 17.01.2015

Справочная информация

Некоторая информация о предпочтениях содержится в JavaFX. Справочное руководство по CSS:

стиль из таблицы стилей пользовательского агента имеет более низкий приоритет, чем значение, установленное из кода, который имеет более низкий приоритет, чем таблица стилей сцены или родительского элемента. Встроенные стили имеют наивысший приоритет. Таблицы стилей из родительского экземпляра считаются более специфичными, чем стили из таблиц стилей сцены.

Также обратите внимание, что приложение имеет только одну таблица стилей пользовательского агента, которая обычно является встроенной стандартной таблицей стилей для JavaFX (например, modena.css для JavaFX 8). Обычно приложения не переопределяют эту таблицу стилей.

Таким образом, ваша таблица стилей сцены, которая устанавливает текстовую заливку метки, будет иметь предпочтение перед встроенным кодом, который устанавливает текстовую заливку метки, и правило css вступит в силу всякий раз, когда внутренняя реализация JavaFX решит применить Css к графу сцены.

Возможные решения

Привязка

Хакерский способ обойти это - следующее утверждение:

customizedLabel.textFillProperty().bind(colorPicker.valueProperty());

Это работает, потому что связанное значение не может быть установлено. После выполнения привязки реализация CSS не может сбросить заливку метки на другое значение.

Позаботьтесь о правилах стиля

Другой способ справиться с этим — убедиться, что вы не установили -fx-text-fill в таблице стилей сцены для меток, для которых вы хотите настроить заливку текста в коде. По сути, это решение Roland «myclass» или «удалить метку» styleclass.

Измените таблицу стилей UserAgent

Вы также можете скопировать стандартную таблицу стилей JavaFX, изменить ее напрямую и установить в своем приложении с помощью setUserAgentStylesheet, после чего вы сможете переопределить в коде любые настройки css, сделанные таблицей стилей пользовательского агента. Я бы рассмотрел это только в том случае, если вы выполняете развертывание в контролируемой среде выполнения JavaFX (например, в качестве автономного развертывания приложения) и можете вносить изменения в таблицу стилей пользовательского агента всякий раз, когда вы обновляете среду выполнения.

person jewelsea    schedule 19.01.2015