Css setStyle内联子元素

Css setStyle内联子元素,css,javafx,Css,Javafx,为了在JavaFX中为许多元素设置背景样式,您需要使用css文件,或者使用.setStyle 在我的例子中,我必须从组合框中设置下拉列表背景的样式,但我必须使用.setStyle而不是css文件(因为我有一些动态颜色,将用于设置不同GUI元素的样式)。这里的问题是,如果我使用以下css代码,函数.setStyle就不会像使用css文件一样识别它 .setStyle(".combo-box .list-cell{ -fx-background: blue;}"); 代码如下所示: comboBo

为了在JavaFX中为许多元素设置背景样式,您需要使用css文件,或者使用.setStyle

在我的例子中,我必须从
组合框
中设置下拉列表背景的样式,但我必须使用
.setStyle
而不是css文件(因为我有一些动态颜色,将用于设置不同GUI元素的样式)。这里的问题是,如果我使用以下css代码,函数
.setStyle
就不会像使用css文件一样识别它

.setStyle(".combo-box .list-cell{ -fx-background: blue;}");
代码如下所示:

comboBox.setStyle(".combo-box .list-cell{ -fx-background: #"+ Color1.toString().substring(2) + ";}");
Color1
being一个
Color
对象,该对象将根据具体情况获得动态值


问题是,我是否可以在函数
.setStyle
中使用
.list cell
?如果是,怎么做?如果我必须使用
.setStyle

的话,这将有助于我处理其他GUI元素。可以为此使用查找颜色。您可以使用
setStyle
指定这些样式,并从CSS样式表中使用它们:

@Override
public void start(Stage primaryStage) {
    ComboBox<String> comboBox = new ComboBox<>();
    comboBox.getItems().addAll("A", "B", "C");

    StackPane root = new StackPane(comboBox);

    // set color
    root.setStyle("cell-color: blue;");

    Scene scene = new Scene(root, 400, 400);
    scene.getStylesheets().add("style.css");

    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.show();
}

就我所拥有的而言,我更喜欢这个解决方案

comboBox.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
    public ListCell<String> call(ListView<String> param) {
        return new ListCell<String>() {
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(item);
                setBackground(new Background(new BackgroundFill(Color.BLACK, CornerRadii.EMPTY, Insets.EMPTY)));
                setTextFill(Color.BLUE);
            }
        };
    }
});
comboBox.setCellFactory(新回调(){
公共ListCell调用(ListView参数){
返回新的ListCell(){
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
setText(项目);
收进背景(新背景(新背景填充(Color.BLACK,CornerRadii.EMPTY,Insets.EMPTY));
setTextFill(颜色:蓝色);
}
};
}
});

如果从
cellFactory
返回自定义
ListCell
s,则可以通过编程方式应用样式。但要让这一切顺利进行实际上更为复杂。JavaFX的大部分外观至少部分是通过CSS实现的。在大多数情况下,这样做更简单。我也会尝试一下,也许这对我将来会有帮助,所以用这种方式学习也不会浪费时间。我真的不想使用css,因为有些用户会处理这些文件,反过来可能会“破坏”应用程序。谢谢