如何在JavaFX中为ComboBox内的项目设置样式

3

在JavaFX中,是否有可能更改ComboBox项目的颜色

我想将每个项目的背景颜色更改为黑色,文本颜色更改为白色,并在悬停时更改为绿色和白色。

@FXML
private ComboBox<String> govs;

public void initialize() {
    ObservableList<String> options = FXCollections.observableArrayList(   
         "Ariana",
         "Beja",
         "Ben Arous",
         "Bizerte",
         "Gabès"
    );   
    govs.setItems(options);
}
1个回答

2

由于无法通过对节点应用CSS规则来完成此操作,因此您必须提供自己的单元格工厂实现以用于组合框。

comboBox.setCellFactory(param -> new ComboBoxListCell<String>() {{
    setTextFill(Color.WHITE);

    Background blackBackground = new Background(new BackgroundFill(Color.BLACK, null, null));
    Background greenBackground = new Background(new BackgroundFill(Color.GREEN, null, null));

    setBackground(blackBackground);
    setOnMouseEntered(event -> {
        setBackground(greenBackground);
    });
    setOnMouseExited(event -> {
        setBackground(blackBackground);
    });
}});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接