Контейнер javafx.scene.layout.BorderPane позволяет прижать вложенные элементы управления к одной из сторон контейнера: по верхнему, нижнему, левому или правому краю или расположить по центру.
Класс BorderPane имеет следующие конструкторы:
BorderPane(): создает пустой контейнер BorderPane
BorderPane(Node center): создает контейнер BorderPane, в котором по центру располагается элемент center
BorderPane(Node center, Node top, Node right, Node bottom, Node left): создает контейнер BorderPane, в котором по центру располагается элемент center, по верхнему краю - элемент top, по правому краю - элемент right, по нижнему краю - элемент bottom и по нижнему краю - узел left
Расположение элемента по центру:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Button btn = new Button("Hello"); BorderPane root = new BorderPane(btn); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("BorderPane in JavaFX"); stage.show(); } }
Некоторые из основных методов BorderPane:
Node getBottom()
: получает узел, который расположен по нижнему краю BorderPane
void setBottom(Node child)
: располагает узел по нижнему краю
Node getCenter()
: получает узел, который расположен по центру
void setCenter(Node child)
: располагает узел по центру
Node getLeft()
: получает узел, который расположен по левому краю
void setLeft(Node child)
: располагает узел по левому краю
Node getRight()
: получает узел, который расположен по правому краю
void setRight(Node child)
: располагает узел по правому краю
Node getTop()
: получает узел, который расположен по верхнему краю
void setTop(Node child)
: располагает узел по верхнему краю
static Pos getAlignment(Node child)
: получает параметры выравнивания элемента child в виде объекта Pos
static void setAlignment(Node child, Pos value)
: задает выравнивание для элемента child
static void setMargin(Node child, Insets value)
: устанавливает для элемента child внешние отступы от границ контейнера
static Insets getMargin(Node child)
: получает внешние отступы элемента от границ контейнера
При размещении элементов, следует учитывать, что для каждого элемента задается по умолчанию определенное выравнивание:
top: Pos.TOP_LEFT
bottom: Pos.BOTTOM_LEFT
left: Pos.TOP_LEFT
right: Pos.TOP_RIGHT
center: Pos.CENTER
С помощью метода setAlignment мы можем переопределить выравнивание по умолчанию:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.geometry.Pos; import javafx.scene.layout.BorderPane; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Button left = new Button("Left"); BorderPane.setAlignment(left, Pos.CENTER); Button right = new Button("Right"); BorderPane.setAlignment(right, Pos.BOTTOM_LEFT); Button top = new Button("Top"); BorderPane.setAlignment(top, Pos.CENTER); Button bottom = new Button("Bottom"); BorderPane.setAlignment(bottom, Pos.CENTER); Button center = new Button("Center"); BorderPane root = new BorderPane(center, top, right, bottom, left); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("BorderPane in JavaFX"); stage.show(); } }
В данном случае выравнивание все элементов идет по центру исходя из того, к какой стороне контейнера они примыкают:
Благодаря методам BorderPane нам необязательно определять элементы для центра, или для каждой из сторон. Мы можем установить элементы только для тех сторон, которые действительно необходимы:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.geometry.Pos; import javafx.scene.layout.BorderPane; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { BorderPane root = new BorderPane(); Button top = new Button("Top"); BorderPane.setAlignment(top, Pos.CENTER); root.setTop(top); Button center = new Button("Center"); root.setCenter(center); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("BorderPane in JavaFX"); stage.show(); } }