Я создал JavaFX ComboBox с помощью JavaFX Scene Builder 21.0.0.
<?xml version = "1.0" encoding = "UTF-8"?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.text.Font?>
<StackPane xmlns = "http://javafx.com/javafx/21" xmlns:fx = "http://javafx.com/fxml/1" maxHeight = "-Infinity" maxWidth = "-Infinity" minHeight = "-Infinity" minWidth = "-Infinity" prefHeight = "146.0" prefWidth = "404.0">
<children>
<AnchorPane prefHeight = "236.0" prefWidth = "432.0">
<children>
<AnchorPane layoutX = "8.0" layoutY = "14.0" prefHeight = "117.0" prefWidth = "387.0">
<children>
<ComboBox layoutX = "38.0" layoutY = "47.0" prefHeight = "26.0" prefWidth = "300.0" promptText = "REINER SCT cyberJack pinpad/e-com USB 52" style = "-fx-font-weight: bold; -fx-background-color: #005f6a; -fx-font-family: "Open Sans"; -fx-font-size: 20.0px; -fx-text-fill: white;" />
<Label layoutX = "38.0" layoutY = "14.0" style = "-fx-font-weight: bold; -fx-font-family: "Open Sans"; -fx-font-size: 20.0px;" text = "Please select a card reader:">
<font>
<Font name = "System Bold" size = "20.0" />
</font>
</Label>
</children>
</AnchorPane>
</children>
</AnchorPane>
</children>
</StackPane>
Я установил цвет текста на белый, но текст по-прежнему черный.
Конфигурация построителя сцен JavaFX
Есть идеи, как решить эту проблему?






Одним из возможных способов решения проблемы может быть добавление таблицы стилей в Scene Builder:
Css-код может выглядеть так:
.combo-box .list-cell {
-fx-text-fill: white;
}
.combo-box-base .arrow-button .arrow {
-fx-background-color: white;
}
Как упоминал @Billie, лучший подход — объявить стиль в CSS и включить его в SceneBuilder. Таким образом, вы точно знаете, что укладываете.
При этом основная причина того, что настройка -fx-text-fill в поле со списком не работает, заключается в том, что функция применения текстовых заливок или цветов не может быть унаследована. Только атрибуты шрифта (семейство, размер, стиль и вес) могут быть унаследованы от родительского узла. Вот почему все настройки шрифта в ComboBox применяются к внутренней метке, а не к -fx-text-fill.
Заливки текста или цвета применяются в CSS либо напрямую, либо из предварительно определенной переменной, объявленной на корневом уровне.
Ниже приведен стиль в modena.css для внутренней метки и стрелки ComboBox:
.combo-box > .list-cell {
-fx-background: transparent;
-fx-background-color: transparent;
-fx-text-fill: -fx-text-base-color;
-fx-padding: 0.333333em 0.666667em 0.333333em 0.666667em; /* 4 8 4 8 */
}
.combo-box-base > .arrow-button > .arrow {
-fx-background-color: -fx-mark-highlight-color, -fx-mark-color;
...
}
Если вы заметили, что цвета задаются переменными -fx-text-base-color и -fx-mark-color соответственно. Таким образом, вы можете переопределить эти переменные на уровне ComboBox, чтобы все его дочерние элементы затем использовали эти значения. (Похоже на то, что @jewelsea упомянул в своем комментарии).
Попробуйте тематику, установив
-fx-baseна какой-нибудь цвет (в вашем случае это может быть полезно, а может и нет).