JavaFX ComboBox отображает объект, а не его свойство - PullRequest
0 голосов
/ 21 мая 2018

Я построил графический интерфейс со списком.У меня есть ObservableList<SimpleTableObject> types, который должен отображать типы материалов.Это выглядит так:

 material_comboBox_type.getItems().addAll(types);

    material_comboBox_type.setCellFactory((ListView<SimpleTableObject> 
    param) -> {
          final ListCell<SimpleTableObject> cell = new 
     ListCell<SimpleTableObject>() {                
            @Override
            public void updateItem(SimpleTableObject item, boolean empty) {
                super.updateItem(item, empty);
                if (item != null) {

                    setText(item.getName().get());//return String, actuall name of material

                }
                else {
                    setText(null);
                }
            }
        };
        return cell;
    });

Теперь проблема в следующем: когда я нажимаю на поле со списком, он показывает имена по желанию.Но когда я выбираю один, вместо свойства строки, отображается сам объект, который выглядит так: classes.SimpleTableObject@137ff5c.

Как мне этого достичь?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Хорошо, я сделал это с конвертером:

material_comboBox_type.setConverter(new StringConverter<SimpleTableObject>() {
        @Override
        public String toString(SimpleTableObject object) {
            return object.getName().get();
        }

        @Override
        public SimpleTableObject fromString(String string) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    });
0 голосов
/ 21 мая 2018

Выбранный элемент в поле со списком отображается в ячейке с именем buttonCell.Поэтому вам нужно установить ячейку кнопки, а также фабрику ячеек (которая генерирует ячейки в раскрывающемся списке).

Для этого, вероятно, проще будет реорганизовать реализацию вашей ячейки как (именованный) внутренний класс:

private static class SimpleTableObjectListCell extends ListCell<SimpleTableObject> {

    @Override
    public void updateItem(SimpleTableObject item, boolean empty) {
        super.updateItem(item, empty);
        if (item != null) {

            setText(item.getName().get());//return String, actuall name of material

        }
        else {
            setText(null);
        }
    }

}

А потом:

materialComboBoxType.setCellFactory(listView -> new SimpleTableObjectListCell());
materialComboBoxType.setButtonCell(new SimpleTableObjectListCell());
...