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