JavaFX ComboBox 显示对象不是 属性

JavaFX ComboBox displaying object not it's property

我已经用组合框构建了 GUI。我有 ObservableList<SimpleTableObject> types 应该显示 material 的类型。看起来像这样

 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;
    });

现在的问题是:当我单击组合框时,它会显示所需的名称。但是当我 select 一个而不是字符串 属性 时,会显示一个对象本身,看起来像 classes.SimpleTableObject@137ff5c.

如何实现?

组合框中的选定项目显示在名为 buttonCell 的单元格中。所以你需要设置纽扣电池和电池工厂(在下拉列表中生成电池)。

为此,将单元实现重构为(命名的)内部 class:

可能更容易
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());

好的,我用转换器做了这个:

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.
        }
    });