it-swarm.com.ru

Как изменить цвет фона TextField, не меняя границы в javafx?

Я пытаюсь изменить цвет фона моего TextField "colorBox0" на "value0", но он избавляется от границы.
Вот упрощенная версия моего кода:

   static Paint value0 = Paint.valueOf("FFFFFF");
   TextField colorBox0;
   colorBox0.setBackground(new Background(new BackgroundFill(value0, CornerRadii.EMPTY, Insets.EMPTY)));

Любая помощь очень ценится
Спасибо

10
sazzy4o

Я обнаружил, что вы можете создать строку кода CSS из строки и переменной, используя метод to string и метод substring следующим образом:

colorBox0
.setStyle("-fx-control-inner-background: #"+value0.toString().substring(2));
11
sazzy4o

Рассмотрение (сокращенных) стилей JavaFX по умолчанию для TextField многое объясняет:

.text-input {
  -fx-background-color: linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
    linear-gradient(from 0px 0px to 0px 5px, derive(-fx-control-inner-background, -9%), -fx-control-inner-background);
  -fx-background-insets: 0, 1;
  -fx-background-radius: 3, 2;
}

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

Сначала нам нужно назначить новый класс пользовательских стилей для нашей TextField:

TextField textField = new TextField();
textField.getStyleClass().add("custom");

и файл CSS:

.custom {
  -fx-control-inner-background: orange;
}

Как видите, вам не нужно переопределять все стили текстового поля, достаточно переопределить только цветовую переменную, используемую для фона.

7
eckig

Попробуйте установить цвет с помощью CSS: 

TextField colorBox0;
colorBox0.setStyle("-fx-background-color: white;");
3
javaHunter

Элегантное решение с цветным переводом:

static Paint black = Paint.valueOf(Integer.toHexString(Color.BLACK.hashCode()));
TextField textfield;
textField.setStyle(
"-fx-control-inner-background: #"+black.toString().substring(2));
0
Jerzy Nowakowski