StackPane

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

Панель компоновки javafx.scene.layout.StackPane позволяет располагать элементы поверх других элементов, то есть в виде стека, где каждый новый элемент наслаивается поверх другого. По умолчанию StackPane пытается масштабировать каждый вложенный элемент таким образом, чтобы он заполнил все пространство контейнера. Если вложенный элемент не может быть отмасштабирован, то он располагается по центру контейнера.

StackPane имеет два конструктора:

  • StackPane(): создает пустой объект StackPane

  • StackPane​(Node... children): создает объект StackPane, заполненный узлами children

Создадим простейший StackPane:

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

public class Main extends Application{
	
	public static void main(String[] args) {
        
		Application.launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Label headerLbl = new Label("Press the login button");
		Label statusLbl = new Label("Start screen");
		Button loginBtn = new Button("Login");
		
		StackPane root = new StackPane(headerLbl, statusLbl, loginBtn);
		
		Scene scene = new Scene(root, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("StackPane in JavaFX");
		
        stage.show();
	}
}
StackPane в JavaFX

По умолчанию элементы центрируются в контейнере. Поскольку кнопка добавляется последней, то она накладывается поверх остальных. Однако вряд ли такой интерфейс можно считать оптимальным. Поскольку нет смысла располагать кнопки и метки поверх друг друга. Но с помощью статического метода setAlignment() можно опредленным образом позиционировать вложенный элемент:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
import javafx.scene.layout.StackPane;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		Application.launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Label headerLbl = new Label("Press the login button");
		StackPane.setAlignment(headerLbl, Pos.TOP_CENTER);
		Label statusLbl = new Label("Start screen");
		StackPane.setAlignment(statusLbl, Pos.BOTTOM_CENTER);
		Button loginBtn = new Button("Login");
		
		StackPane root = new StackPane(headerLbl, statusLbl, loginBtn);
		
		Scene scene = new Scene(root, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("StackPane in JavaFX");
		
        stage.show();
	}
}

С помощью значения перечисления Pos StackPane может расположить элемент по каком-то определенном месте контейнера.

Alignment в StackPane в JavaFX

Среди методов StackPane следует отметить следующие:

  • Pos getAlignment(): возвращает параметры выравнивания элемента

  • static Pos getAlignment​(Node child): возвращает параметры выравнивания для элемента child внутри StackPane

  • static Insets getMargin​(Node child): возвращает для элемента child отступы от границ контейнера StackPane

  • void setAlignment​(Pos value): устанавливает параметры выравнивания для StackPane

  • static void setAlignment​(Node child, Pos value): устанавливает параметры выравнивания для элемента child внутри StackPane

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

Например, устаовим отступы элментов от границ StackPane:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import javafx.scene.layout.StackPane;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		Application.launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Label headerLbl = new Label("Press the login button");
		StackPane.setAlignment(headerLbl, Pos.TOP_CENTER);
		StackPane.setMargin(headerLbl, new Insets(10, 0, 0, 0));
		
		Label statusLbl = new Label("Start screen");
		StackPane.setAlignment(statusLbl, Pos.BOTTOM_CENTER);
		StackPane.setMargin(statusLbl, new Insets(0, 0, 10, 0));
		
		Button loginBtn = new Button("Login");
		
		StackPane root = new StackPane(headerLbl, statusLbl, loginBtn);
		
		Scene scene = new Scene(root, 300, 150);
		stage.setScene(scene);
		
        stage.setTitle("StackPane in JavaFX");
		
        stage.show();
	}
}
Insects в StackPane в JavaFX

Для установки отступов применяется объет Insects, в конструктор которого передается значение отступов от верхней, правой, нижней и левой границы контейнера соответственно.

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