HBox

Последнее обновление: 07.06.2018

Класс javafx.scene.layout.HBox организует все вложенные элементы в виде горизонального ряда.

Для создания объекта HBox можно использовать один из конструкторов класса:

  • HBox(): определяет пустой объект HBox

  • HBox​(double spacing): определяет пустой объект HBox, в котором элеметы будут находиться друг от друга на расстоянии spacing

  • HBox​(double spacing, Node... children): определяет объект HBox, заполненный элементами nodes, которые находятся друг от друга на расстоянии spacing

  • HBox​(Node... children): определяет объект HBox, заполненный элементами nodes

Определим простой HBox:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;

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");
		
		HBox root = new HBox(10, label1, label2, label3, label4, label5, label6, label7);
		Scene scene = new Scene(root, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("HBox in JavaFX");
		
        stage.show();
	}
}
HBox в JavaFX

Может показаться, что HBox ничем не отличается от FlowPane в горизонтальной ориентации. Однако если вложенные элементы не умещаются по длине контейнера, то они не переносятся на новую строку, а сжимаются, чтобы соответствовать по совокупности ширине контейнера.

Некоторые из методов HBox:

  • getAlignment(): получает выравнивание внутри FlowPane в виде объекта Pos

  • setAlignment​(Pos value): задает выравнивание

  • getSpacing(): возвращает расстояние между элементами

  • setSpacing​(double value): устанавливает расстояние между элементами

  • getHgrow​(Node child): возвращает для элемента child ограничение hgrow в виде объекта Priority

  • setHgrow​(Node child, Priority value): устанавливает для элемента child ограничение hgrow

  • setFillHeight​(boolean value): при передачи значения true расширяет HBox по всей высоте контейнера

  • isFillHeight(): возвращает логическое значение true или false, которое указывает, развернут ли HBox по всей высоте контейнера

  • setMargin​(Node child, Insets value): устанавливает для элемента child внешние отступы от границ контейнера

  • getMargin​(Node child): получает внешние отступы элемента от границ контейнера

Особого внимания заслуживает метод setHgrow​(), который позволяет установить для элемента ограничение hgrow. Это ограничение представляет класс javafx.scene.layout.Priority и позволяет указать, как будет растягиваться вложенный элемент.

Рассмотрим следующую ситуацию:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		Application.launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		HBox hbox = new HBox();
		Button button1 = new Button("Add");
		Button button2 = new Button("Remove");
		hbox.getChildren().addAll(button1, button2);
		Scene scene = new Scene(hbox, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("HBox in JavaFX");
		
        stage.show();
	}
}

Две кнопки вполне умещаются по ширине HBox, однако часть пространства контейнера остается не заполненным, да и сами кнопки выглядят не очень хорошо:

Растяжение в HBox по ширине в JavaFX

Используем ограничение hgrow:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		Application.launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		HBox hbox = new HBox();
		Button button1 = new Button("Add");
		Button button2 = new Button("Remove");
		HBox.setHgrow(button1, Priority.ALWAYS);
		HBox.setHgrow(button2, Priority.ALWAYS);
		button1.setMaxWidth(Double.MAX_VALUE);
		button2.setMaxWidth(Double.MAX_VALUE);
		hbox.getChildren().addAll(button1, button2);
		Scene scene = new Scene(hbox, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("HBox in JavaFX");
		
        stage.show();
	}
}

Для кнопок с помощью setMaxWidth задана максимальная ширина, которая принимает максимально допустимое значение для типа double. А в качестве ограничения для обеих кнопок задано значение Priority.ALWAYS, которое указывает, что кнопки автоматически будут масштабироваться, чтобы заполнить пространство контейнера..

hgrow в HBox в JavaFX
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850