2015-09-12 4 views
1

У меня есть ComboBox, который я заполняю значениями объекта Sheet.JavaFX ComboBox - другой текст, отображаемый после выбора

Я установил фабрику ячеек, чтобы отобразить имя листа в выпадающем списке. Он работает правильно (кажется, так).

Проблема заключается в том, что после выбора элемента («Ячейка») значение, отображаемое в поле, не является значением, которое было показано в списке.

Это соответствующая часть кода:

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 Спасибо

ответ

4

ячейка используется для отображения выбранного элемента является 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()); 
      } 
     }   
    }; 
} 
+0

Спасибо. Странно, что setButtonCell обычно не упоминается в примерах setCellFactory. –

Смежные вопросы