![](/img/trans.png)
[英]Text color on JavaFX ComboBox items change only after first selection
[英]JavaFX ComboBox - different text showing after the selection
我有一個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());
}
}
};
}
});
用於顯示所選項目的單元格是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());
}
}
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.