Skip to content

已阅读

0%

JavaFx中CommboBox的实现

Java JavaFX

创建CommboBox实例,修改其显示部分及弹出部分样式,自定义鼠标悬浮时的样式

标签:
JavaFX
发布于 2024年4月2日
更新于 2024年4月2日

环境

  • Java 17
  • JavaFX 21

JavaFX ComboBox 通过代码实现

1. 创建ComboBox

首先,我们需要导入必要的JavaFX包并创建一个ComboBox实例:

java
// 创建一个包含字符串项的ObservableList
ObservableList<String> items = FXCollections.observableArrayList(
    "Item 1", 
    "Item 2", 
    "Item 3",
    // ... 更多项
);

// 创建ComboBox对象
ComboBox<String> comboBox = new ComboBox<>(items);

// 设置占位符文本
comboBox.setPlaceholder(new Label("请选择一个选项"));

// 设置ComboBox是否可编辑
comboBox.setEditable(true);

2. 设置ComboBox项的自定义呈现

可以通过设置cellFactory来改变ComboBox项的默认样式:

java
comboBox.setCellFactory(param -> new ListCell<String>() {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setText(null);
            setGraphic(null);
        } else {
            setText(item);
        }
        // 设置字体及字体颜色
        setFont(font);
        setTextFill(Color.web("#000000"));
        // 设置背景颜色
        setStyle("-fx-background-color: #ffffff;"); 
        // 设置鼠标悬浮时颜色
        hoverProperty().addListener((obs, wasHovered, isNowHovered) -> {
            if (isNowHovered) {
                setStyle("-fx-background-color: #98aeca,#7190b6; " + "-fx-text-fill: black;");
            } else {
                setStyle("-fx-background-color: #ffffff;; " + "-fx-text-fill: #000000;");
            }
        });
    }
});

通过setSkin(Skin<?> var1)修改comboBox弹出部分样式

java
final ComboBoxListViewSkin<String> skin = new ComboBoxListViewSkin<>(comboBox);
@SuppressWarnings("unchecked") final ListView<String> popup = (ListView<String>) skin.getPopupContent();
popup.setBackground(new Background(new BackgroundFill(Color.web(color), CornerRadii.EMPTY, null)))
comboBox.setSkin(skin);

Last updated: