Класс Scene

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

Класс javafx.scene.Scene представляет контейнер для всех графических элементов внутри объекта Stage в виде графа, который называется Scene Graph. Все узлы этого графа, то есть по сути все вложенные элементы должны представлять класс javafx.scene.Node. Но корневой узел этого графа должен представлять объект класса, который унаследован от javafx.scene.Parent. По сути Parent - это контейнер, который может содержать другие элементы.

Элементы в Scene в JavaFX

Для установки корневого узла в Scene применяется один из конструкторов объекта Scene. Основные из них:

  • Scene(Parent root): создает Scene с корневым узлом root

  • Scene(Parent root, double width, double height): создает Scene с корневым узлом root, с шириной width и высотой height

  • Scene(Parent root, Paint fill): создает Scene с корневым узлом root и устанавливает фоновый цвет

  • Scene(Parent root, double width, double height, Paint fill): создает Scene с корневым узлом root, с шириной width и высотой height и устанавливает фоновый цвет

При этом все конструкторы принимают в качестве первого параметра корневой узел. То есть при создании объекта Scene нам та или иначе придется установить и корневой узел.

Для установки сцены у объекта Stage вызывается метод setScene(), в который передается объект Scene. Например, создадим простейшую сцену:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Group root = new Group();		// корневой узел
		Scene scene = new Scene(root);	// создание Scene
		stage.setScene(scene);			// установка Scene для Stage
		
        stage.setTitle("Hello JavaFX");
		stage.setWidth(300);
		stage.setHeight(150);
		
        stage.show();
	}
}

В данном случае в качестве корневого узла используется объект класса Group, который унаследован от класса Parent. Однако поскольку Group не содержит никаких элементов, то по сути мы увидим пустое окно.

Немного изменим код программы:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.layout.FlowPane;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
 
public class Main extends Application{
     
    public static void main(String[] args) {
         
        launch(args);
    }
     
    @Override
    public void start(Stage stage) {
         
		Label label = new Label("Hello");				// текстовая метка
		Button button = new Button("Button");			// кнопка
        Group group = new Group(button);       			// вложенный узел Group
		
        FlowPane root = new FlowPane(label, group);       // корневой узел
        Scene scene = new Scene(root, 300, 150);  		// создание Scene
        stage.setScene(scene);          				// установка Scene для Stage
         
        stage.setTitle("Hello JavaFX");
         
        stage.show();
    }
}

Здесь в качестве корневого узла выступает класс FlowPane, который располагает вложенные элементы подряд и который, как и Group, унаследован от класса Parent. FlowPane содержит объект Label (текстовая метка) и объект Group. А объект Group, в свою очередь, содержит объект Button (кнопка).

Визуально это будет выглядеть следующим образом:

Элементы в Scene Graph в JavaFX

А сам Scene Graph в данном случае будет представлять следующую структуру:

Настройка фонового цвета окна

С помощью Scene мы можем настроить фоновый цвет и размеры окна. Для этого мы можем использовать один из конструкторов:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.Group;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Group root = new Group();
		Scene scene = new Scene(root, 400, 150, Color.BLUE);
		//scene.setFill(Color.BLUE); альтернативная установка цвета
		stage.setScene(scene);
		
        stage.setTitle("Hello JavaFX");
		
        stage.show();
	}
}

В данном случае вся сцена занимает 400 единиц в ширину и 150 единиц в длину и будет окрашена в синий цвет. Цвет представляет объект javafx.scene.paint.Color.

Создание графического интерфейса и класс Scene в JavaFX

Также для установки цвета можно применять метод setFill(Paint value).

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