2016-04-06 4 views
0

私はSceneBuilderとその関連コントローラで作成されたfxmlファイルにメインGUIを持っています。 メインGUIでは、各セルに3つの子(ラベル、TextView、CheckBox)を配置したいグリッドペインがあります。 私はrootと3人の子供としてHBoxを使って追加のfxmlを作成しました。JavaFxにはメインGUIに複数のGUIが含まれています

今、メインのグリッドパネルのコードによって、各セルの定義済みコンポーネントを追加し、それらと相互作用できますか?

私が意味する...私がやりたいことは、メインのGUIコントローラで、このようなものである:(int型I) について(int型J) gridpane.add( "the_composed_view_in_the_other_fxml"、私は

、 J)

答えて

1

私が正しくあなたの質問を理解していれば、あなたはあなたの「メイン」コントローラのinitialize方法でこのような何かをするだろう:Aからロードされたコンポーネントと「相互作用」について

public class MainController { 

    @FXML 
    private GridPane gridpane ; 

    public void initialize() throws IOException { 
     int numCols = ... ; 
     int numRows = ... ; 

     for (int rowIndex = 0 ; rowIndex < numRows ; rowIndex++) { 
      for (int colIndex = 0 ; colIndex < numCols ; colIndex++) { 
       FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/addtional/fxml")); 
       gridpane.add(loader.load(), colIndex, rowIndex); 
      } 
     } 
    } 
} 

追加のfxmlのためのコントローラの責任は本当にあります。あなたはFXMLファイルをロードした後、あなたは、これらのコントローラのそれぞれへの参照を取得することができます:

gridpane.add(loader.load(), colIndex, rowIndex); 
AdditionalController controller = loader.getController(); 

をして、あなたがそのコントローラクラスで定義されたメソッドを呼び出すことができます。あなたは本当にあなたがここで何をしたいかもしれないものについての十分な詳細を提供する、しかし、例えば:

public class AdditionalController { 

    @FXML 
    private CheckBox checkBox ; 

    public BooleanProperty selectedProperty() { 
     return checkBox.selectedProperty(); 
    } 

    // etc... 
} 

、その後

gridpane.add(loader.load(), colIndex, rowIndex); 
AdditionalController controller = loader.getController(); 

String s = String.format("Item [%d, %d]", colIndex, rowIndex); 
controller.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> { 
    if (isNowSelected) { 
     // process selection... 
     System.out.println(s + " is selected"); 
    } 
}); 
ような何かしていません
関連する問題