Я часами работаю над ListView, который обновляет изменения ChoiceBox. Итак, я хочу выбрать группу пользователей (у группы пользователей есть имя, отображаемое в поле выбора), и слушатель choicebox получает все имена пользователей из БД, записывает их в новый список и передает их в ListView, который я хочу сейчас менять. Впервые он работает нормально, но я не могу изменить его снова.
Сначала мой ListView был интегрирован в файл FXML, созданный SceneBuilder2.0. Это не сработало. Поэтому я проверил интернет и подумал, что могу создать только новый объект ListView с помощью = new ListView <> (), но это не сработает, когда ListView создан Scenebuilder. Поэтому я создал панель с помощью Scenebuilder, вручную добавил ListView и добавил ее на панель с помощью .getChildren (). Add (listView). Это тоже не сработало или, скажем, я все еще получил тот же результат.
Я попытался отредактировать ArrayList, который находится за ListView, но я прочитал, что я не должен этого делать. Так что я изменил ObservableList, но тоже безуспешно. Так что в настоящее время у меня заканчиваются идеи. В моем коде ниже поле выбора (поле) получило свой собственный список, который работает нормально (потому что мне не нужно его менять). Изменив элемент box, он проверит базу данных для группы игроков, которая теперь должна отображаться в списке. Получение списка из БД работает нормально, но это не изменит ListView. Если я просто сбрасываю ListView с помощью setItems (), я получаю странный вывод. Если я сделаю .clear (), а затем .setItems () у меня возникнет исключение NullpointerException.
Так что я думаю, что может быть проблема с перекраской? Может ли это быть? Спасибо за любую помощь. Теперь это мой последний кусок кода, но я также попробовал несколько других способов заставить его работать.
box.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
String selection = box.getItems().get(newValue.intValue());
GetDataDB dbGet = new GetDataDB();
playerList = FXCollections.observableArrayList(dbGet.getPlayerListForTourGrpFromDB(selection));
setPlayerList(playerList);
}
});
public void initListPanes() {
// called at the initialization of the object
playerListView = new ListView<>();
playerPane.getChildren().add(playerListView);
}
public void setPlayerList(ObservableList<Player> playerList) {
playerListView = new ListView<>();
playerListView.setItems(playerList);
playerListView.setCellFactory(playerView -> new PlayerListViewCell());
}