Я создаю систему кинематографа, в которой пользователь должен иметь возможность выбирать фильм через выпадающий список на главной странице. Я создал список Array в классе FilmController, а затем преобразовал его в observableList и пытаюсь заполнить его содержимое в выпадающем списке (HomepageController).
Это FilmController с arraylist & observableList
public class FilmController {
private ArrayList<Film> films = new ArrayList<>();
public FilmController() {
Film f1 = new Film("Avatar", "James Cameron", "James Cameron",
"Sam Wortherington" + "Zoe Saldana", "162", "Sci-Fi", 8.50);
Film f2 = new Film("Black Panther", "Kevin Feige", "Ryan Coogler",
"Chadwick Boseman" + "Lupita Nyong'o", "135", "Sci-Fi Fantasy", 10.00);
Film f3 = new Film("Creed 2", "Sylvester Stallone", "Steven Caple Jr",
"Michael B Jordan" + "Tessa Thompson", "130", "Drama", 10.00);
Film f4 = new Film("Deadpool", "Simon Kinberg", "Tim Miller",
"Ryan Reynolds" + "Morena Baccarin", "109", "Sci-Fi", 7.50);
Film f5 = new Film("A Quiet Place", "Michel Bay", "John Krasinski",
"Emily Blunt" + "John Krasinski", "91", "Thriller", 8.00);
films.add(f1);
films.add(f2);
films.add(f3);
films.add(f4);
films.add(f5);
}
public ArrayList<Film> getFilms() {
return films;
}
public ObservableList<Film> getOlFilms() {
return FXCollections.observableArrayList(films);
}
}
Я пытался реализовать это в HomepageController, но, похоже, выдает ошибку:
public class HomepageController {
public ComboBox cbFilms;
public void initialize() {
cbFilms.setButtonCell((ListCell) cbFilms.getCellFactory().call(null));
}
public void cbListFilms(ActionEvent actionEvent) {
FilmController f = new FilmController();
cbFilms.setItems(f.getOlFilms().toArray());
}
}
Я посмотрел на этот вопрос , но, похоже, он мне не подходит.
Я бы хотел, чтобы в выпадающем списке отображалось только название фильма, и желательно, чтобы при наведении курсора мыши на название фильма, я хотел, чтобы отображались оставшиеся атрибуты, если это возможно.
Это содержимое fxml для выпадающего списка:
<ComboBox fx:id="cbFilms" layoutX="291.0" layoutY="138.0" onAction="#cbListFilms" prefHeight="31.0" prefWidth="230.0"
promptText="Please select film by name" style="-fx-background-color: tan;">
<items>
<FXCollections fx:factory="observableArrayList"/>
</items>
<effect>
<SepiaTone/>
</effect>
</ComboBox>