JavaFXStringConverter最后一个对象
我在创建可编辑的ListView时遇到了一个小问题 因此,我有一个城市类,有两个字段:JavaFXStringConverter最后一个对象,java,user-interface,orm,javafx,ormlite,Java,User Interface,Orm,Javafx,Ormlite,我在创建可编辑的ListView时遇到了一个小问题 因此,我有一个城市类,有两个字段:id和name,我从数据库中创建了一个城市的可观察列表,并将其分配给我的ListView,我还创建了我的cellFactory: @DatabaseTable(tableName = "city") public class City { @DatabaseField(generatedId = true) private int id; @DatabaseField pri
id
和name
,我从数据库中创建了一个城市的可观察列表,并将其分配给我的ListView,我还创建了我的cellFactory:
@DatabaseTable(tableName = "city")
public class City {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField
private String name;
public City() {}
}
citiesList.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView参数){
ListCell单元格=新建TextFieldListCell(新建StringConverter(){
@凌驾
公共字符串toString(城市对象){
返回object.getName().trim();
}
@凌驾
公共城市fromString(字符串){
//如何修改单元格中的对象???
返回null;
}
});
返回单元;
}
});
我想知道当调用fromString
时,是否可以获取单元格(城市)中当前值的引用
我想这样做,以允许用户更改城市名称,而不必更改其Id字段。如果先创建单元格,然后创建转换器,则可以在转换器中引用
cell.getItem()。以下似乎有效:
citiesList.setCellFactory(lv -> {
TextFieldListCell<City> cell = new TextFieldListCell<City>();
StringConverter<City> converter = new StringConverter<City>() {
@Override
public String toString(City city) {
return city.getName();
}
@Override
public City fromString(String string) {
City city = cell.getItem();
if (city == null) {
City newCity = new City();
newCity.setName(string);
return newCity;
} else {
city.setName(string);
return city ;
}
}
};
cell.setConverter(converter);
return cell ;
});
citiesList.setCellFactory(lv->{
TextFieldListCell单元格=新的TextFieldListCell();
StringConverter转换器=新的StringConverter(){
@凌驾
公共字符串toString(城市){
return city.getName();
}
@凌驾
公共城市fromString(字符串){
City=cell.getItem();
如果(城市==null){
城市新城=新城();
newCity.setName(字符串);
返回新城;
}否则{
city.setName(字符串);
回归城市;
}
}
};
cell.setConverter(转换器);
返回单元;
});
事实上,我并不觉得这很明显;我花了一段时间才弄明白怎么做。也许我也很笨。。。
citiesList.setCellFactory(lv -> {
TextFieldListCell<City> cell = new TextFieldListCell<City>();
StringConverter<City> converter = new StringConverter<City>() {
@Override
public String toString(City city) {
return city.getName();
}
@Override
public City fromString(String string) {
City city = cell.getItem();
if (city == null) {
City newCity = new City();
newCity.setName(string);
return newCity;
} else {
city.setName(string);
return city ;
}
}
};
cell.setConverter(converter);
return cell ;
});