2016-08-17 12 views
0

したがって、TableViewをクリックすると開く新しいウィンドウにパラメータ(ID)を渡す必要があります。具体的には、MainContorllerからTvShowsAboutControllerにシリーズIDパラメータを渡す必要があります。JavaFX FXMLの新しい枠線枠にパラメータを渡す

MainControllerからTvShowsAboutControllerを開きます。このように:

public void showSeriesInfo() { 

    try { 

     BorderPane tvShows = (BorderPane) FXMLLoader.load(getClass().getResource("/seriesapp/javafx/tvShowAbout.fxml")); 

     setCenterPane(tvShows); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

しかし、TvShowsAvoutControllerクラスで引数を渡す方法はわかりません。新しいTvShowsAboutControllerクラスを作成すると、FXMLファイルがロードされなかったためクラッシュします。私はStackOverflowで同様の問題を見たPassing Parameters JavaFX FXMLしかしそれはあまり役に立たなかった。私はこれを試みたが、運ました:

メインコントローラクラス

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; 
    } 

P.S.このように新しいペインを開くと、私は引数の受け渡し方法がわからないと言っています。

答えて

2

デフォルトでは、FXMLLoaderはFXMLファイルで指定されたコントローラクラスのインスタンスを作成します。したがって、コントローラはFXMLファイルをロードするまで使用できません。だから、メソッドの順序を変更する必要があります呼び出します。

FXMLLoader loader = new FXMLLoader(getClass().getResource("/javafx/tvShowAbout.fxml")); 

BorderPane tvShows = (BorderPane) loader.load(); 

TvShowAboutController controller = 
     loader.<TvShowAboutController>getController(); 
controller.initData(showsTable.getSelectionModel().getSelectedItem().getShowid()); 

注これはTvShowAboutControllerで、initialize()initData()前に呼び出されることを意味し、そうinitialize()であなたが何も初期化されてidに依存することはできません。この場合、それに依存するものはinitData()メソッドに移動する必要があります。たとえば、あなたがshowSeriesInfo()が何をするか表示されませんでしたが、あなたは

// @FXML 
// public void initialize() { 
//  showSeriesInfo(); 
// } 

void initData(int showId) { 
    this.seriesId = showId ; 
    showSeriesInfo(); 
} 
+0

を行うために必要がある場合があります詳細な説明のためにありがとうございました。これで解決しました。 – user3746480