Как различные виды контейнеров (Router) в JavaFX загружают и отображают контент?

«Как различные виды контейнеров (Router) в JavaFX загружают и отображают контент?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В JavaFX контейнеры (Pane) управляют layout'ом дочерних элементов. Вот как основные из них работают как "роутеры" контента:

  1. StackPane: Накладывает элементы друг на друга в стеке. Видимым обычно является верхний элемент.

    StackPane root = new StackPane();
    Button btn1 = new Button("Button 1");
    Label label = new Label("Overlaid Label");
    root.getChildren().addAll(btn1, label); // Label будет поверх Button
  2. TabPane: Организует контент по вкладкам. Каждая Tab содержит свой узел (Node).

    TabPane tabPane = new TabPane();
    Tab tab1 = new Tab("View 1", new Label("Content for Tab 1"));
    Tab tab2 = new Tab("View 2", new Button("Click Me"));
    tabPane.getTabs().addAll(tab1, tab2);
  3. BorderPane: Размещает элементы в пяти фиксированных областях (top, bottom, left, right, center).

    BorderPane borderPane = new BorderPane();
    borderPane.setTop(new MenuBar()); // Меню сверху
    borderPane.setCenter(new TextArea("Main Content")); // Основной контент в центре
    borderPane.setLeft(new NavigationTree()); // Навигация слева
  4. Сторонние библиотеки для навигации (например, FXRouter): Предоставляют абстракцию для переключения целых сцен (FXML/Java-классы) по строковым путям.

    // Инициализация
    FXRouter.bind(this, primaryStage, "My App", 800, 600);
    FXRouter.when("main", "/views/main.fxml");
    FXRouter.when("detail", "/views/detail.fxml");
    FXRouter.goTo("main"); // Загрузка и отображение main.fxml

    Ключевое отличие: Стандартные Pane управляют layout'ом внутри одного окна, а библиотеки вроде FXRouter управляют переключением между разными Scene или корневыми узлами, что ближе к концепции роутинга в веб.