Обычно все элементы управления, которые используются в приложении, помещаются в специальные контейнеры - панели компоновки (layout panes). Все панели встроенные компоновки наследуются от класса javafx.scene.layout.Pane, который, в свою очередь, наследуется от Region.
Панели компоновки позволяют упорядочить вложенные элементы определенным образом и могут определять их размеры. В JavaFX есть несколько встроенных панелей компоновки:
AnchorPane: позволяет прижимать вложенные элементы управления к одной из сторон контейнера или размещать их по центру
BorderPane: поволяет упорядочить вложенные элементы управления относительно одной из сторон контейнера
FlowPane: размещает все вложенные элементы либо по горизонтали (если элементы не помещаются, то они переносятся на новую строку), либо по вертикали (если элементы не помещаются, то они переносятся в новый столбик)
GridPane: образует сетку из строк и столбцов и размещает вложенные элементы ячейках полученной таблицы
HBox: размещает все элементы в виде одной строки, то есть горизонтальный стек
VBox: размещает все элементы в виде одного столбца, то есть вертикальный стек
StackPane: располагает одни элементы поверх других
TilePane: размещает все вложенные элементы в виде тайлов
Поскольку все эти классы наследуются от класса Pane, то они все они имеют один важный метод - getChildren(), который возвращает коллекцию вложенных в контейнер элементов в виде объекта интерфейса ObservableList<Node>. Интерфейс ObservableList, в свою очередь, расширяет интерфейсы Collection<E>, Iterable<E>, List<E>, Observable.
Каждый вложенный элемент представляет объект Node. Используя методы ObservableList, мы можем добавлять узлы Node в эту коллекцию, а по сути в контейнер компоновки.
Например, возьмем простейшую панель компоновки - FlowPane и добавив в нее два элемента - Label и Button:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Button; import javafx.scene.layout.FlowPane; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Label lbl = new Label("Hello"); Button btn = new Button("Click"); FlowPane root = new FlowPane(); root.getChildren().addAll(lbl, btn); Scene scene = new Scene(root, 300, 200); stage.setScene(scene); stage.setTitle("Layout in JavaFX"); stage.show(); } }
Подобным образом можно добавлять данные во все другие панели компоновки.