Pane в JavaFX
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Pane.html см. Direct known subclasses
HBox, VBox
Уже обсуждали.
Ограничения:
- hgrow (HBox.setHgrow(узел, …)) ctrl + (shift) + space устанавливается, растягивать ли место под соответствующий узел.
- margin - отступы. HBox.setMargin(узел, …)
В общем случае все ограничения устанавливаются так. Т.е. с помощью статических методов класса панельки.
BorderPane
Подходит для расположения узлов слева, справа, сверху, снизу, по центру. Не более пяти, можно меньше, например, только центр и низ.
Ограничения
- alignment - где расположен элемент внутри отведенной области, если его нельзя растянуть на всю область
- margin - отступы для элемента
BorderPane.setMargin(узел, ...)
- обязательное ограничение: где элемент, слева, снизу и т.п.
для указания ограничения, где
находится элемент можно написать
проще, чем стандартный способ
через
BorderPane.set...(узел, где)
Можно написать просто
borderPane.setCenter(узел);
borderPane.setLeft(узел);
и т.п.
FlowPane
Панелька располагает элементы слева направо, друг за другом, если место по горизонтали не хватает, то элемент переносится на следующую “строку”.
Можно устанавливать пропуски между элементами hgap, vgap.
Можно выкладывать элементы не по горизонтали, а по вертикали, это свойство orientation.
GridPane
Узлы располагаются по сетке.
При добавлении каждого узла
обязательно должно быть указано
ограничение, в каком месте
сетки он находится. Для этого
есть вспомогательные методы,
т.е. GridPane.setRowIndex()
GridPane.setColumnIndex()
можно не делать. Проще так:
gridpane.add(узел, столб, строка).
Для подузлов есть ограничения:
- halignment, valignment - где располагать элемент в клетке таблицы, по вертикали и горизонтали
- hgrow, vgrow - растягивать ли
- margin - собственные отступы.
Ограничения для строк, столбцов
Ограничения можно указать еще и для строк и столбцов отдельно. Это нужно, например, если вы хотите, чтобы у вас было два столбика по 50% ширины. Или вы хотите, чтобы первый столбец имел ширину, которую предпочитают его дети. А второй столбец - растягивался по ширине.
Как этого добиться:
GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints(100, 100, Double.MAX_VALUE);
column1.setHgrow(Priority.ALWAYS);
ColumnConstraints column2 = new ColumnConstraints(100);
//добавить ограничения в панель
gridpane.getColumnConstraints().addAll(column1, column2);
еще несколько Pane
TilePane - примерно как FlowPane, но все элементы одного размера. Подходит для галереии изображений, например. Или списка элементов папки.
StackPane - элементы располагаются друг над другом. Т.е. элементы перекрывают друг друга.