环境
- 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);