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

<p>я пытаюсь изменить цвет фона моего textfield "colorbox0" на "value0", но он избавляется от границы.<br> вот упрощенная версия моего кода:</p><pre><code> static paint value0 = paint.valueof("ffffff"); textfield colorbox0; colorbox0.setbackground(new background(new backgroundfill(value0, cornerradii.empty, insets.empty))); </code></pre><p>любая помощь очень ценится<br> спасибо</p>

<p>я обнаружил, что вы можете создать строку кода css из строки и переменной, используя метод to string и метод substring следующим образом:</p><pre><code>colorbox0 .setstyle("-fx-control-inner-background: #"+value0.tostring().substring(2)); </code></pre>

<p>рассмотрение (сокращенных) стилей javafx по умолчанию для <code>textfield</code> многое объясняет:</p><pre><code>.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; } </code></pre><p>таким образом, фон является слоистым фоном, включая границу. эта техника часто используется в javafx. но очень легко изменить только один цвет.</p><p>сначала нам нужно назначить новый класс пользовательских стилей для нашей <code>textfield</code>:</p><pre><code>textfield textfield = new textfield(); textfield.getstyleclass().add("custom"); </code></pre><p>и файл css:</p><pre><code>.custom { -fx-control-inner-background: orange; } </code></pre><p>как видите, вам не нужно переопределять все стили текстового поля, достаточно переопределить только цветовую переменную, используемую для фона.</p>

<p>попробуйте установить цвет с помощью css: </p><pre><code>textfield colorbox0; colorbox0.setstyle("-fx-background-color: white;"); </code></pre>

<p>элегантное решение с цветным переводом:</p><pre><code>static paint black = paint.valueof(integer.tohexstring(color.black.hashcode())); textfield textfield; textfield.setstyle( "-fx-control-inner-background: #"+black.tostring().substring(2)); </code></pre>