FlowPane располагает вложенные элементы друг за другом. Если они не помещаются в один ряд, то они переносятся на следующий ряд.
По умолчанию элементы размещаются в ряд по горизонтали, но также можно размещать их и по вертикали.
Для создания FlowPane можно использовать один из конструкторов класса:
FlowPane()
: определяет горизонтальный ряд элементов
FlowPane(double hgap, double vgap)
: определяет горизонтальный ряд элементов, для каждого элемента определяется отступ по вертикали vgap и отступ по горизонтали hgap.
В предыдущем конструкторе по умолчанию отступы имеют значение 0
FlowPane(double hgap, double vgap, Node... children)
: определяет отступы, а последний параметр определяет набор вложенных элементов
FlowPane(Orientation orientation)
: позволяет задать направление контейнера: по-горизонтали или по-вертикали
FlowPane(Orientation orientation, double hgap, double vgap)
: задает направление элементов и их отступы
FlowPane(Orientation orientation, double hgap, double vgap, Node... children)
: задает направление элементов, их отступы, а также сами помещаемые в контейнер элементы
FlowPane(Orientation orientation, Node... children)
: определяет направление элементов и сами элементы
FlowPane(Node... children)
: определяет вложенные элементы
Используем FlowPane для компоновки элементов Label:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; 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 label1 = new Label("Label1"); Label label2 = new Label("Label2"); Label label3 = new Label("Label3"); Label label4 = new Label("Label4"); Label label5 = new Label("Label5"); Label label6 = new Label("Label6"); Label label7 = new Label("Label7"); Label label8 = new Label("Label8"); Label label9 = new Label("Label9"); FlowPane root = new FlowPane(10, 10, label1, label2, label3, label4, label5, label6, label7, label8, label9); //root.getChildren().addAll(label1, label2, label3, label4, label5, label6, label7, label8, label9); Scene scene = new Scene(root); stage.setScene(scene); stage.setTitle("FlowPane in JavaFX"); stage.setWidth(300); stage.setHeight(200); stage.show(); } }
По умолчанию элементы (в данном случае 9 меток Label) размещаются по горизонтали. Отступы между элементами как по горизонтали, так и по вертикали составляют 10 единиц.
Чтобы задать вертикальное направление элементов, необходимо использовать значение Orientation.VERTICAL
:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.FlowPane; import javafx.geometry.Orientation; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Label label1 = new Label("Label1"); Label label2 = new Label("Label2"); Label label3 = new Label("Label3"); Label label4 = new Label("Label4"); Label label5 = new Label("Label5"); Label label6 = new Label("Label6"); Label label7 = new Label("Label7"); Label label8 = new Label("Label8"); Label label9 = new Label("Label9"); FlowPane root = new FlowPane(Orientation.VERTICAL, 10, 10, label1, label2, label3, label4, label5, label6, label7, label8, label9); Scene scene = new Scene(root); stage.setScene(scene); stage.setTitle("FlowPane in JavaFX"); stage.setWidth(300); stage.setHeight(200); stage.show(); } }
Для управления FlowPane можно применять его методы, некоторые из них:
getAlignment(): получает выравнивание внутри FlowPane в виде объекта Pos
setAlignment(Pos value): задает выравнивание
setColumnHalignment(HPos value): задает горизонтальное выравнивание элементов при вертикальной ориентации FlowPane
getColumnHalignment(): получает значение горизонтального выравнивания
setRowValignment(VPos value): устанавливает вертикальное выравнивание элементов при горизонтальное ориентации FlowPane
getRowValignment(): получает значение вертикального выравнивания
setHgap(double value): устанавливает отступы между элементами по горизонтали
getHgap(): получает отступы между элементами по горизонтали
setVgap(double value): устанавливает отступы между элементами по вертикали
getVgap(): получает отступы между элементами по вертикали
setOrientation(Orientation value): устанавливает направление элементов
getOrientation(): получает направление элементов в виде объекта Orientation
setMargin(Node child, Insets value): устанавливает для элемента child внешние отступы от границ контейнера
getMargin(Node child): получает внешние отступы элемента от границ контейнера
Применим некоторые из этих методов:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.FlowPane; import javafx.geometry.Orientation; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Label label1 = new Label("Label1"); Label label2 = new Label("Label2"); Label label3 = new Label("Label3"); Label label4 = new Label("Label4"); Label label5 = new Label("Label5"); Label label6 = new Label("Label6"); Label label7 = new Label("Label7"); Label label8 = new Label("Label8"); Label label9 = new Label("Label9"); FlowPane root = new FlowPane(); root.setVgap(8); root.setHgap(15); root.setOrientation(Orientation.VERTICAL); root.getChildren().addAll(label1, label2, label3, label4, label5, label6, label7, label8, label9); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("FlowPane in JavaFX"); stage.show(); } }
Ряд методов управляет выравниванием. Так, метод setAlignment() устанавливает выравнивание элементов с помощью объекта javafx.geometry.Pos. Этот класс определяет ряд констант для установки выравнивания:
BASELINE_CENTER
: выравнивание по базовой линии по вертикали и по центру по горизонтали
BASELINE_LEFT
: выравнивание по базовой линии по вертикали и по левому краю по горизонтали
BASELINE_RIGHT
: выравнивание по базовой линии по вертикали и по правому краю по горизонтали
BOTTOM_CENTER
: выравнивание по нижнему краю по вертикали и по центру по горизонтали
BOTTOM_LEFT
: выравнивание по нижнему краю по вертикали и по левому краю по горизонтали
BOTTOM_RIGHT
: выравнивание по нижнему краю по вертикали и по правому краю по горизонтали
CENTER
: выравнивание по центру как по вертикали, так и по горизонтали
CENTER_LEFT
: выравнивание по центру по вертикали и по левому краю по горизонтали
CENTER_RIGHT
: выравнивание по центру по вертикали и по правому краю по горизонтали
TOP_CENTER
: выравнивание по верхнему краю по вертикали и по центру по горизонтали
TOP_LEFT
: выравнивание по верхнему краю по вертикали и по левому краю по горизонтали (значение по умолчанию)
TOP_RIGHT
: выравнивание по верхнему краю по вертикали и по правому краю по горизонтали
Например, расположим элементы по центру:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.FlowPane; import javafx.geometry.Pos; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { Label label1 = new Label("Label1"); Label label2 = new Label("Label2"); FlowPane root = new FlowPane(10, 10, label1, label2); root.setAlignment(Pos.CENTER); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("FlowPane in JavaFX"); stage.show(); } }