2016-04-06 20 views
0

SceneBuilder ve onun ilgili denetleyicisi ile oluşturulan fxml dosyasında ana gui var. Bu ana gui'de, her hücre için, üç çocuk (bir etiket, bir TextView ve bir CheckBox) koymak istediğim bir gridpane var. Bu yüzden, bir HBox'u root ve üçü childs ile ek bir fxml oluşturdum.JavaFx, ana gui'de birden fazla gui içerir

Şimdi ... Her hücrenin tanımlanmış bileşeninin ana kılavuzunun ızgara kısmına kodla nasıl ekleyebilir ve onlarla etkileşimde bulunabilir miyim?

Yani

... ne yapmak istediğiniz ana gui denetleyicisi böyle bir şeydir: (int i) için (int j) gridpane.add ("the_composed_view_in_the_other_fxml" için

i, a yüklenen bileşenleri ile "etkileşim" için

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

: sorunuzu doğru anlamak j)

cevap

1

ise, "ana" kumandanın initialize yönteminde böyle bir şey yapacağını ek fxml dosyası, gerçekten ek fxml için denetleyicinin sorumluluğundadır. Eğer fxml dosyasını yüklemek sonra bu kontrolörlerinin her bir başvuru alabilirsiniz:

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

ve sonra o denetleyici sınıfında tanımladığınız yöntemleri çağırabilir. Gerçekten ör .:

public class AdditionalController { 

    @FXML 
    private CheckBox checkBox ; 

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

    // etc... 
} 

sonra bir şeyler

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

gibi, buradan yapmak istiyorum nasıl olduğuna dair yeterli ayrıntı sağlanan, ancak henüz