因此,我需要将参数(ID)传递给新窗口,该窗口通过单击TableView打开 . 具体来说,我需要将系列Id参数从MainContorller传递给TvShowsAboutController .
我正在从MainController打开TvShowsAboutController . 像这样:
public void showSeriesInfo() {
try {
BorderPane tvShows = (BorderPane) FXMLLoader.load(getClass().getResource("/seriesapp/javafx/tvShowAbout.fxml"));
setCenterPane(tvShows);
} catch (Exception e) {
e.printStackTrace();
}
}
但是我没有加载FXML文件 . 我在StackOverflow Passing Parameters JavaFX FXML上看到了一个类似的问题,但它并没有尝试过这个问题,但没有运气:
MainController类
public void showSeriesInfo() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/javafx/tvShowAbout.fxml"));
TvShowAboutController controller =
loader.<TvShowAboutController>getController();
controller.initData(showsTable.getSelectionModel().getSelectedItem().getShowid());
BorderPane tvShows = (BorderPane) loader.load();
setCenterPane(tvShows);
} catch (Exception e) {
e.printStackTrace();
}
}
TvShowsAboutController类
@FXML
public void initialize(){
showSeriesInfo();
}
void initData(Integer showId) {
this.seriesId = showId;
}
附:打开新窗格就是这样,但正如我所说,我无法弄清楚如何传递参数
1 回答
默认情况下,
FXMLLoader
创建FXML文件中指定的控制器类的实例 . 因此,控制器在加载FXML文件之后才能使用 . 所以你需要改变方法调用的顺序:注意这意味着在
TvShowAboutController
中,initialize()
将在initData()
之前被调用,所以你在initialize()
中所做的一切都不依赖于正在初始化的id
. 在这种情况下,您应该将依赖于此的任何内容移动到initData()
方法 . 例如,您没有显示showSeriesInfo()
的作用,但您可能需要这样做