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