Как просмотреть список кнопок на JavaFX и показать сцену в соответствии с данными указанной кнопки - PullRequest
0 голосов
/ 25 сентября 2019

Я делаю систему бронирования в кинотеатре / кинотеатре.

У меня есть список кнопок, настроенный для отображения списка фильмов, воспроизводимых на домашней странице.Я пытаюсь сделать функцию, которая, когда мы нажимаем одну из кнопок на домашней странице, она меняет сцену, где вы можете увидеть полную информацию о фильме.

Проблема в том, что он всегда показывает толькопервый фильм в моем списке фильмов.

Я попытался установить какой-то указатель для идентификации каждой кнопки.

Вот объекты:

filmPointer startв 1, потому что filmNumber начинается в 1, также я могу увидеть ошибку, если я установлю ее 0

private static List<User> userList = User.getList();
private static List<Film> filmList = Film.getList();
private static ArrayList<Button> allFilmLink = new ArrayList<>();
public static int filmPointer = 1, accountPointer; 

Функция показа кнопки с изображениями на домашней странице:

public void filmListContent(){
    mainPane.setContent(filmListPane);

    for (int x = 0; x < filmList.size(); x++) {
        Button listFilmButton = new Button();
        listFilmButton.setPrefHeight(300);
        listFilmButton.setPrefWidth(250);
        int finalX = x;
        listFilmButton.setOnAction(actionEvent -> {
            mainWindow.setScene(currentFilmScene); //open film detail
            filmPointer = filmList.get(finalX).getNumberFilm();

        });
        imageFilm = new Image(getClass().getResourceAsStream(filmList.get(x).pathPictureFilm), 250, 350, false, false);
        listFilmButton.setGraphic(new ImageView(imageFilm));

        allFilmLink.add(listFilmButton);
    }
    showFilmLink();
}

Вот код, который есть у меня в другом классе, где я настроил сцену и ее функции:

private void createFilmScene(){
    Text filmTitle = null;
    filmPane = new GridPane();
    HBox titleHB;

    for (int x = 0; x < filmList.size(); x++) {
            if (filmList.get(x).getNumberFilm() == Main.filmPointer) {
                filmPictureStream = new Image(getClass().getResourceAsStream(filmList.get(x).getPathPictureFilm()));
                filmPictureView = new Label("", new ImageView((filmPictureStream)));
                filmTitle = new Text(filmList.get(x).getTitle());

        }
    }

    filmTitle.setFont(Font.font("Times New Roman", FontWeight.BOLD, 30));
    titleHB = new HBox(11);
    titleHB.setAlignment(TOP_CENTER);
    titleHB.getChildren().add(filmTitle);
    filmPane.add(titleHB, 5, 19);
    filmPane.add(filmPictureView, 2, 2, 2, 2); // placement not final
    filmPane.setHgap(5);
    filmPane.setVgap(15);

}

Если я нажму на 47 метров вниз, я ожидаю, что сцена изменится, а затем детализирует фильм, который я нажимаю.Но это всегда показывает ЭТО Глава 2.

Моя домашняя страница: Imgur Link

Моя страница с подробностями фильма, когда я нажимаю на 47 метров вниз: Imgur Link

1 Ответ

0 голосов
/ 26 сентября 2019

Проблема была в createFilmScene(), вызвано слишком рано (в методе start).Я закодировал его таким образом, так как думал, что currentFilmPane и currentFilmScene нужно сначала инициализировать, прежде чем что-либо делать с ним.

Код:

public void filmListContent() {
    mainPane.setContent(filmListPane);

    for (int x = 0; x < filmList.size(); x++) {
        Button listFilmButton = new Button();
        listFilmButton.setPrefHeight(300);
        listFilmButton.setPrefWidth(250);
        int finalX = x;
        listFilmButton.setOnAction(actionEvent -> {
            filmPointer = filmList.get(finalX).getNumberFilm();
            currentFilmPane = new GridPane();
            FilmPage setFilmPane = new FilmPage(currentFilmPane);
            currentFilmScene = new Scene(setFilmPane.asParent(), 1920, 1080);
            mainWindow.setScene(currentFilmScene);

        });
        imageFilm = new Image(getClass().getResourceAsStream(filmList.get(x).pathPictureFilm), 250, 350, false, false);
        listFilmButton.setGraphic(new ImageView(imageFilm));

        allFilmLink.add(listFilmButton);
    }
    showFilmLink();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...