2016-04-06 2 views
0

У меня есть главный файл gui в файле fxml, созданный с помощью SceneBuilder и связанного с ним контроллера. В этом главном gui у меня есть gridpane, где я хочу поставить для каждой ячейки три дочерних элемента (метку, TextView и CheckBox). Итак, я создал дополнительный fxml с HBox как root и тремя дочерними.JavaFx включает несколько gui в main gui

Теперь ... Как я могу добавить по коду в gridpane основного gui определенный компонент для каждой ячейки и взаимодействовать с ними?

Я имею в виду ... что я хочу сделать что-то вроде этого в главном контроллере графического интерфейса:

для (INT I) для (Int J) gridpane.add ("the_composed_view_in_the_other_fxml", я, к)

ответ

1

Если я правильно понимаю ваш вопрос, вы могли бы сделать что-то подобное в initialize методе «основной» контроллер:

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

Для «взаимодействия» с компонентами, загруженных из а dditional fxml-файл, на самом деле это ответственность контроллера за дополнительный 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"); 
    } 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^