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