Реализовать стиль только для чтения в JavaFX?

Я хотел бы иметь сущность (элемент управления или свойство), который имеет различные состояния, которые можно раскрасить с помощью CSS.

Например, рассмотрим TextField, который может содержать два вида значений: нормальное и ошибочное. Если оно содержит ошибочное значение, оно должно отображаться "красным". Но фактический цвет должен быть определен из CSS.

Возможно ли это реализовать?

Я нашел много Styleable* интерфейсы или классы, но они выглядят как способные принять любой стиль.

Могу ли я написать и сущность, которая выводит свой стиль из значения?

2 ответа

Решение

Ты можешь использовать Node.pseudoClassStateChanged:

TextField tf = new TextField();
final PseudoClass shortText = PseudoClass.getPseudoClass("short");
final PseudoClass longText = PseudoClass.getPseudoClass("long");
tf.textProperty().addListener((observable, oldValue, newValue) -> {
    tf.pseudoClassStateChanged(shortText, false);
    tf.pseudoClassStateChanged(longText, false);
    if (newValue!=null && !newValue.isEmpty()) {
        if (newValue.length() < 5) {
            tf.pseudoClassStateChanged(shortText, true);
        } else {
            tf.pseudoClassStateChanged(longText, true);
        }
    }
});

С CSS, как это:

.text-field:short {
 -fx-background-color: #ffaaaa;
}
.text-field:long {
 -fx-background-color: #aaffaa;
}

Хотя, если честно, я не совсем уверен, каковы плюсы и минусы Style Class и Pseudo Class.

При изменении события определенного свойства вы можете изменить класс стиля этого объекта (элемент управления или свойство), чтобы применить несколько цветов.
Для этого вам нужно добавить несколько стилей цвета в CSS, а затем вы можете изменить класс стилей с помощью приведенного ниже кода.

 textfield.getStyleClass().add("red");  

Например, в событии действия TextField вы можете проверить, какое значение пользователь ввел в TextField, и если введенное значение является "ошибочным", то получить объект текстового поля и установить для него имя класса стиля, используя приведенный выше код.

Другие вопросы по тегам