JavaFX .setStyle内联子元素

时间:2018-05-15 16:50:01

标签: css javafx

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

在我的情况下,我必须设置ComboBox下拉列表的背景样式,但我必须使用.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建立一个Color对象,根据具体情况得到动态值。

问题是,我可以在函数.list-cell中使用.setStyle吗?如果是这样,怎么样?这将有助于我使用其他GUI元素,我将不得不使用.setStyle

2 个答案:

答案 0 :(得分:0)

可以使用查找颜色。您可以使用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();
}

的style.css

/* default values */
.root {
    cell-color: yellow;
}

/* use color */
.combo-box .list-cell {
    -fx-background: cell-color;
}

答案 1 :(得分:0)

对于我所拥有的,我更喜欢这个解决方案。

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);
            }
        };
    }
});