Javafx 如何加上「;“空的”;选择组合框?

Javafx 如何加上「;“空的”;选择组合框?,javafx,combobox,Javafx,Combobox,我有一个用自定义对象填充的组合框。但是,我需要允许选择no选择(或空值)。我尝试了comboBox.getItems().add(null),但没有添加空选择 如何在顶部添加一个空白选择,以允许用户“取消选择”所有项目?您可以添加一个占位符元素。您只需测试引用的相等性,而不是检查取消选择的项。根据类设计,您可能需要使用自定义单元格工厂来显示此项的“无”文本: public class CustomItem { private final String text; public

我有一个用自定义对象填充的组合框。但是,我需要允许选择no选择(或空值)。我尝试了
comboBox.getItems().add(null)
,但没有添加空选择


如何在顶部添加一个空白选择,以允许用户“取消选择”所有项目?

您可以添加一个占位符元素。您只需测试引用的相等性,而不是检查取消选择的项。根据类设计,您可能需要使用自定义单元格工厂来显示此项的“无”文本:

public class CustomItem {

    private final String text;

    public CustomItem(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }

}
最终CustomItem emptyPlaceholder=新CustomItem(空);
ComboBox combo=新ComboBox();
combo.getItems().addAll(emptyPlaceholder、新CustomItem(“foo”)、新CustomItem(“bar”);
combo.setCellFactory(lv->new ListCell(){
@凌驾
受保护的void updateItem(CustomItem,布尔值为空){
super.updateItem(项,空);
setText((空的| |项==null | |项==emptyPlaceholder)
? ""
:item.getText());
}
});
setButtonCell(combo.getCellFactory().call(null));

不需要占位符元素,您可以创建一个额外的列表,其中包含null作为第一项,并根据原始列表进行更新:
final CustomItem emptyPlaceholder = new CustomItem(null);
ComboBox<CustomItem> combo = new ComboBox<>();
combo.getItems().addAll(emptyPlaceholder, new CustomItem("foo"), new CustomItem("bar"));
combo.setCellFactory(lv -> new ListCell<CustomItem>() {

    @Override
    protected void updateItem(CustomItem item, boolean empty) {
        super.updateItem(item, empty);

        setText((empty || item == null || item == emptyPlaceholder)
                ? ""
                : item.getText());
    }

});
combo.setButtonCell(combo.getCellFactory().call(null));