JavaFX ComboBox显示对象而不是它的属性

时间:2018-05-21 12:21:41

标签: javafx combobox observablecollection

我用组合框构建了GUI。我有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 :(得分:1)

组合框中的选定项目显示在名为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());

答案 1 :(得分:0)

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

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