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
添加回答
举报