【发布时间】:2018-03-05 20:36:22
【问题描述】:
我有一个填充了自定义对象的ComboBox。但是,我需要允许选择 no 选择(或空值)。我试过comboBox.getItems().add(null),但这并没有添加一个空的选择。
如何在顶部添加一个空白选择以允许用户“取消选择”所有项目?
【问题讨论】:
我有一个填充了自定义对象的ComboBox。但是,我需要允许选择 no 选择(或空值)。我试过comboBox.getItems().add(null),但这并没有添加一个空的选择。
如何在顶部添加一个空白选择以允许用户“取消选择”所有项目?
【问题讨论】:
您可以添加一个占位符元素。您只需测试引用相等性,而不是检查取消选择的项目。根据类设计,您可能需要使用自定义单元工厂来显示此项的无文本:
public class CustomItem {
private final String text;
public CustomItem(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
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));
【讨论】: