Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFXStringConverter最后一个对象_Java_User Interface_Orm_Javafx_Ormlite - Fatal编程技术网

JavaFXStringConverter最后一个对象

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

我在创建可编辑的ListView时遇到了一个小问题

因此,我有一个城市类,有两个字段:
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 ;
});