JavaFX ComboBox - 选择后显示的不同文本

时间:2015-09-12 11:51:14

标签: java combobox javafx-8

我有一个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());
                }
            }        
        };
    }
});

这是问题(视觉上): enter image description here 谢谢

1 个答案:

答案 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());
            }
        }        
    };
}