Здравствуйте.
Пишу приложения на javafx. Столкнулся со следующей проблемой, и не могу понять что я делаю не так.
Для хранения данных использую
ObservableList<User> users = new FXCollections.observableArrayList();
Инициализирую в методе initialize() контроллера, отображение данных из класса User т.о.
// Controller
...
@FXML
private void initialize() {
nameList.setCellFactory((ListView<User> userListView) -> new UsersFormatCell());
}
...
Класс UserFormatCell (по-чистому слизан из java-demo):
public class UsersFormatCell extends ListCell<User> {
@Override
public void updateItem(User user, boolean empty) {
super.updateItem(user, empty);
// format of the cell in list
setText(user == null ? "" : user.getName());
}
}
Класс User имеет поля StringProperty(в частности SimpleStringProperty), и соответствующий набор геттеров и сеттеров, т.е. может возвращать как String так и StringProperty значения, а установка значений проходит через StringProperty.
По идее использование, ObservableList дает возможность оповещать элементы GUI об изменениях, если поля класса модели используют интерфейс StringProperty. И это действительно так, если использовать TableView, то при любых операциях (добавления, изменения, удаления) с таблицей, обновление таблицы происходит автоматически. Однако, в случае ListView такого не происходит. Обновляется список в GUI, только после операции добавления и удаления, а при изменении ничего не происходит (т.е. само значение в ObservableList изменяется, но в GUI этого не видно, пока не добавиться новая запись или не удалиться старая).
Подскажите, пожалуйста, что же я упустил, или сделал не так.