Когда я изменяю цвет prompt-text
, либо через setStyle()
, либо напрямую через CSS
, когда я нажимаю на TextField
, во-первых, он не будет автоматически очищаться и из-затак, «полоса», которая обычно появляется, когда вы собираетесь писать в поле, расположена полностью слева - как вы можете видеть на следующих рисунках:
- На первом снимке фокусируется
Username TextField
, цвет которого prompt-text
изменен на #000000
(черный). - На втором изображении сфокусировано
Password TextField
с настройками по умолчанию prompt-text
.Ничего не изменилось.
Я просмотрел документацию по API JavaFX, многочисленные случаи StackOverflow о TextFields
в целом, случаи CSS на других форумах, modena.css
(.text-input
) искоро.Я нигде не видел никого с такой проблемой, как моя, где предложенное решение сработало бы для меня.
В большинстве случаев люди предлагают использовать -fx-prompt-text-fill: transparent;
, но это делает все prompt-texts
везде пустыми, независимо отсфокусированы они или нет.
Некоторые из вариантов, которые я также попробовал для text-input Class
, таковы:
.text-input, .text-input:focused {
-fx-prompt-text-fill: derive(-fx-control-inner-background, 0%);
}
.text-input .text-input:focused {
-fx-prompt-text-fill: transparent;
}
.text-input, .text-input:focused {
-fx-prompt-text-fill: transparent;
}
Я потратил 8-10 часов на поиски и попыткинайти решение, но я просто недостаточно разбираюсь в JavaFX / CSS.Некоторая помощь будет очень признательна.
РЕДАКТИРОВАТЬ 1:
.text-input {
-fx-prompt-text-fill: <your-color>;
}
.text-input:focused {
-fx-prompt-text-fill: transparent;
}
Это работает, но применяется ко всем TextFields
.Не для конкретного, который я ищу.
#myId {
-fx-prompt-text-fill: <your-color>;
}
#myId:focused {
-fx-prompt-text-fill: transparent;
}
Это также работает, пока я оставляю это как есть.Когда я нажимаю кнопку, которая делает только это: txtUsername.setStyle("-fx-prompt-text-fill: " + returnColorValueInHex(colorPickerValue) + ";");
, цвет меняется, но затем он игнорирует myId:focused
.Как будто его там нет.
.my-styleclass {
-fx-prompt-text-fill: <your-color>;
}
.my-styleclass:focused {
-fx-prompt-text-fill: transparent;
}
Это также работает, но когда я применяю вышеупомянутое setStyle()
, происходит то же самое, что и при работе с ID
.Он игнорирует часть focused
в CSS.
Я нашел этот пример, который работает с привязками.
txtUsername.styleProperty().bind(Bindings.when(txtUsername.focusedProperty())
.then("-fx-prompt-text-fill: transparent;")
.otherwise("-fx-prompt-text-fill: " + returnColorValueInHex(colorPickerValue) + ";"));
Он делает именно то, что я хочу, но я бы хотелизбегать его использования и только стилизовать CSS, если это возможно.
Почему?Я пытаюсь сделать приложение, которое люди могут настроить.Я бы хотел, чтобы они могли изменять цвета определенных частей приложения, и prompt-text
из TextField
является одним из них.Я использую setStyle()
, чтобы применить изменения, чтобы они могли их предварительно просмотреть.Как только они нажмут «Сохранить», все примененные стили будут сохранены в файле .css
, а затем программа загрузит этот файл как stylesheet
после перезапуска.
РЕДАКТИРОВАТЬ 2: Нашел решение здесь.
CSS:
.root{
username-prompt-text-fill: #000000;
}
#txtUsername{
-fx-prompt-text-fill: username-prompt-text-fill;
}
#txtUsername:focused{
-fx-prompt-text-fill: transparent;
}
JAVA:
txtUsername.setStyle("username-prompt-text-fill: " + returnColorValueInHex(colorPickerValue) + ";");