Вы должны добавить собственный класс в ваш css и переключать его, если изменяется состояние фокусировки или состояние длины.
Добавьте следующее в ваш CSS-файл:
.input-field-blue.not-empty-and-unfocused {
-fx-font-weight: bold;
}
Теперь в вашем контроллере добавьте метод checkState
, который добавляет или удаляет класс not-empty-and-unfocused
. Добавьте слушателей к lengthProperty
и focusedProperty
в методе initialize
. Вот важная часть для вашего контроллера:
public class LoginView implements Initializable {
@FXML
public JFXPasswordField pwd;
@FXML
public JFXTextField userName;
@Override
public void initialize(URL location, ResourceBundle resources) {
userName.lengthProperty().addListener((observable, oldValue, newValue) -> checkState(userName));
userName.focusedProperty().addListener((observable, oldValue, newValue) -> checkState(userName));
pwd.lengthProperty().addListener((observable, oldValue, newValue) -> checkState(pwd));
pwd.focusedProperty().addListener((observable, oldValue, newValue) -> checkState(pwd));
}
private void checkState(TextField field) {
if (field.isFocused() || field.getLength() == 0) {
field.getStyleClass().remove("not-empty-and-unfocused");
} else {
field.getStyleClass().add("not-empty-and-unfocused");
}
}
}
EDIT:
Другим вариантом, который вы можете рассмотреть, является использование пользовательского PseudoClass . Поэтому вы должны изменить свой CSS на следующее:
.input-field-blue:not-empty-and-unfocused {
-fx-font-weight: bold;
}
В вашем контроллере вы создаете псевдокласс и немного меняете метод checkState
:
private static final PseudoClass NOT_EMPTY_AND_UNFOCUSED = PseudoClass.getPseudoClass("not-empty-and-unfocused");
private void checkState(TextField field) {
field.pseudoClassStateChanged(NOT_EMPTY_AND_UNFOCUSED, !(field.isFocused() || field.getLength() == 0));
}