javafx.scene.layout.AnchorPane позволяет позиционировать вложеные элементы вдоль одной из сторон контейнера.
AnchorPane имеет два конструктора:
AnchorPane(): создает пустой объект AnchorPane
AnchorPane(Node... children): создает объект AnchorPane, заполненный узлами children
При использовании второго конструкора или при обычном добавлении узлов AnchorPane следует учитывать, что все добавленные узлы по умолчанию будут располагать в левом верхнем углу. И чтобы наспроить расположение, мы можем использовать один из статических методов AnchorPane. Основные методы класса:
static Double getBottomAnchor(Node child)
: возвращает положение узла child относительно нижнего края контейнера
static Double getLeftAnchor(Node child)
: возвращает положение узла child относительно левого края контейнера
static Double getRightAnchor(Node child)
: возвращает положение узла child относительно правого края контейнера
static Double getTopAnchor(Node child)
: возвращает положение узла child относительно верхнего края
static void setBottomAnchor(Node child, Double value)
: устанавливает отступ value для узла child относительно нижнего края контейнера
static void setLeftAnchor(Node child, Double value)
: устанавливает отступ value для узла child относительно левого края контейнера
static void setRightAnchor(Node child, Double value)
: устанавливает отступ value для узла child относительно правого края контейнера
static void setTopAnchor(Node child, Double value)
: устанавливает отступ value для узла child относительно верхнего края контейнера
Используем эти методы для настройки расположения кнопок:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.AnchorPane; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Button topBtn = new Button("Top"); AnchorPane.setTopAnchor(topBtn, 10.0); AnchorPane.setLeftAnchor(topBtn, 60.0); AnchorPane.setRightAnchor(topBtn, 60.0); Button bottomBtn = new Button("Bottom"); AnchorPane.setBottomAnchor(bottomBtn, 10.0); AnchorPane.setLeftAnchor(bottomBtn, 60.0); AnchorPane.setRightAnchor(bottomBtn, 60.0); Button leftBtn = new Button("Left"); AnchorPane.setTopAnchor(leftBtn, 30.0); AnchorPane.setLeftAnchor(leftBtn, 15.0); AnchorPane.setBottomAnchor(leftBtn, 30.0); Button rightBtn = new Button("Right"); AnchorPane.setTopAnchor(rightBtn, 30.0); AnchorPane.setRightAnchor(rightBtn, 10.0); AnchorPane.setBottomAnchor(rightBtn, 30.0); AnchorPane root = new AnchorPane(topBtn, rightBtn, bottomBtn, leftBtn); Scene scene = new Scene(root, 300, 200); stage.setScene(scene); stage.setTitle("AnchorPane in JavaFX"); stage.show(); } }
Стоит отметить, что если мы будем растягивать или сживать окно приложения, то отступы останутся неизменными, а элементы также будут растягиваться и сжиматься соразмерно изменению окна.