我有一个ComboBox,我正在填充Sheet对象值。
我设置了一个Cell Factory,以便在下拉列表中显示工作表的名称。它运作正常(似乎是这样)。
问题是在选择了一个项目(“单元格”)后,框中显示的值不是列表中显示的值。
这是相关的代码部分:
excelFile = new ExcelFile(file);
//ObservableList<String> sheets = FXCollections.observableArrayList(excelFile.getSheetsNames());
ObservableList<Sheet> sheets = FXCollections.observableArrayList(excelFile.getSheets());
sheetsBox.setItems(sheets);
sheetsBox.setDisable(false);
sheetsBox.setCellFactory(new Callback<ListView<Sheet>, ListCell<Sheet>>() {
@Override
public ListCell<Sheet> call(ListView<Sheet> param) {
return new ListCell<Sheet>() {
@Override
protected void updateItem(Sheet item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
setText(item.getSheetName());
}
}
};
}
});
答案 0 :(得分:5)
用于显示所选项目的单元格是buttonCell
。所以你只需要为按钮单元设置相同的单元格。您可以将单元格创建因素分解为避免复制代码的方法:
sheetsBox.setCellFactory(lv -> createSheetCell());
sheetsBox.setButtonCell(createSheetCell());
// ...
private ListCell<Sheet> createSheetCell() {
return new ListCell<Sheet>() {
@Override
protected void updateItem(Sheet item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
setText(item.getSheetName());
}
}
};
}