JavaFX 组合框显示对象而不是其属性



我已经用组合框构建了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.

我怎样才能实现它?

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

好的,我用转换器做到了这一点:

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

相关内容

  • 没有找到相关文章

最新更新