1 回答

TA貢獻1865條經驗 獲得超7個贊
這樣做的原因是增加了內容,等等。在創建外觀時,在第一個布局傳遞期間添加到場景。此布局傳遞發生在 JavaFX 應用程序線程“重新獲得控制權”之后(即,您已完成事件處理程序、方法或讓 JavaFX 執行代碼的類似方式)。ScrollPaneScrollBarApplication.start
請注意,您正在以一種非常奇怪的方式使用控制器類。我建議使用這個問題的答案中描述的方法之一與控制器進行通信:傳遞參數JavaFX FXML
例如:
public class MovieShowings{
private AnchorPane root;
public MovieShowings() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("movieshowings.fxml"));
root = loader.load();
MovieShowingsController controller = loader.getController();
controller.initMovieShowings(this);
}
catch(IOException e){
e.printStackTrace();
}
}
...
}
public class MovieShowingsController {
...
public void initMovieShowings(MovieShowings showings) {
String date = "2019-04-15";
Date sqlDate = Date.valueOf(date);
System.out.println("\n");
System.out.println("***Screenings for " + date + "***");
filmList = new ArrayList();
screeningList = DatabaseConnection.getInstance().retrieveScreeningsForDay(sqlDate);
for (Screening screeningInstance : screeningList) {
if (!filmList.contains(screeningInstance.getFilmInfo())) {
filmList.add(screeningInstance.getFilmInfo());
}
System.out.println(screeningInstance.toString());
}
Collections.sort(screeningList);
this.showings = showings;
//populating FXML instance variable from loader
// use the injected field here
buildMovieShowings(vbox);
}
...
}
由于您實際上并沒有在控制器中使用該對象,因此可以通過從MovieShowings
@FXML
private void initialize()
方法,并從控制器代碼中刪除每個與之相關的部分。通過這種方式,您可以擺脫將其傳遞給控制器的必要性。MovieShowings
使用使用自定義單元格也可以是顯示電影的選項...ListView
添加回答
舉報