我想要一个可以重复使用的 ComboBox 特殊样式类。例如,我想要创建一个yellowed
提供黄色背景的类。这是我的代码:
Java:
public class NewMain extends Application {
@Override
public void start(Stage primaryStage) {
ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll("Option 1", "Option 2", "Option 3");
comboBox.getStyleClass().add("yellowed");
VBox vbox = new VBox(comboBox);
Scene scene = new Scene(vbox, 400, 300);
scene.getStylesheets().add(NewMain.class.getResource("test.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
样式表:
.combo-box.yellowed {
-fx-background-color: yellow;
}
.combo-box-popup.yellowed > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell {
-fx-background-color: yellow;
}
问题是yellowed
将显示的弹出窗口(具有样式类的 ComboBox 的弹出窗口)没有类yellowed
。
有人能说一下是否有办法向特定 ComboBox 的弹出窗口添加样式类吗?
ComboBox
弹出窗口被视为1的后代。JavaFX CSS 参考指南对此进行了记录:因此,您需要做的就是:
从技术上讲,
combo-box.yellowed .list-cell
就足够了,但请注意 还将针对用于显示实际组合框的节点(即“按钮单元”,它也是一个ListCell
)。当然,如果您想要/需要,可以使选择器更具体。这是一个可运行的示例:
请注意,该示例需要 Java 21+ 和 JavaFX 17+。
1. 对于那些好奇的人来说,这是通过重写来返回控制权来实现的。
PopupControl#getStyleableParent()