为了为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
。
答案 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();
}
/* 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);
}
};
}
});