簡體   English   中英

JavaFX ComboBox-選擇后顯示不同的文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM