2015-09-08 3 views
2

У меня есть небольшая проблема для создания редактируемого ListView.javafx StringConverter Last Object

так у меня есть City Class с двумя полями: id и name, я создал ObservableList городов из базы данных и присвоенных его к моему ListView, и я создал свой cellFactory:

@DatabaseTable(tableName = "city") 
public class City { 

    @DatabaseField(generatedId = true) 
    private int id; 

    @DatabaseField 
    private String name; 

    public City() {} 
} 

citiesList.setCellFactory(new Callback<ListView<City>, ListCell<City>>() { 

      @Override 
      public ListCell<City> call(ListView<City> param) { 

       ListCell<City> cells = new TextFieldListCell<>(new StringConverter<City>() { 

        @Override 
        public String toString(City object) { 
         return object.getName().trim(); 
        } 

        @Override 
        public City fromString(String string) { 
         // how to modify the object that was in the cell??? 
         return null; 
        } 
       }); 

       return cells; 
      } 
     }); 

Я хочу знать, если его можно получить справку о текущем значении в ячейке (город), когда fromString называется

Я хочу сделать это, чтобы пользователь мог изменить имя города, не изменяя его поле «Идентификатор».

ответ

3

Если вы сначала создаете ячейку, тогда создайте конвертер, вы можете ссылаться на 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 ; 
}); 
+0

О s *** т, я был настолько глуп, спасибо – karim

+2

На самом деле, я не считаю, что совершенно очевидно; мне потребовалось некоторое время, чтобы понять, как это сделать. Может быть, я тоже тупой ... –