Stage, javafx.stage.Stage, представляет окно в настольном приложении JavaFX. Внутри Stage вы можете вставить Scene, которая представляет контент, отображаемый в окне — внутри Stage.
Когда приложение запускается, оно создает корневой объект Stage, который передается методу start (Stage primaryStage) корневого класса вашего приложения. Этот объект представляет главное окно вашего приложения. Вы можете создавать новые объекты Stage позже в течение работы вашего приложения, если вашему приложению нужно открывать больше окон.
Создание
Вы создаете объект Stage: с помощью новой команды и конструктора Stage. Вот пример:
Stage stage = new Stage();
Показ
Простое создание объекта Stage не покажет его. Чтобы сделать видимым, вы должны вызвать его метод show() или showAndWait().
Stage stage = new Stage(); stage.show();
show() против showAndWait()
Различие между методами состоит в том, что show() делает Stage видимым и немедленно покидает метод show(), тогда как showAndWait() показывает объект Stage, а затем блокирует (остается внутри showAndWait()), пока Stage не будет закрыт.
Как установить Scene
Для отображения чего-либо внутри Stage вы должны установить Scene объекта Stage. Содержимое Scene будет отображаться внутри Stage, пока он отображается. Вот пример:
VBox vBox = new VBox(new Label("A JavaFX Label"));
Scene scene = new Scene(vBox);
Stage stage = new Stage();
stage.setScene(scene);
Название
Вы можете установить заголовок Stage с помощью метода setTitle(). Заголовок отображается в строке заголовка окна:
stage.setTitle("JavaFX Stage Window Title");
Позиция
Вы можете установить положение (X, Y) рабочей области с помощью методов setX() и setY(). Они устанавливают положение верхнего левого угла окна, представленного рабочей областью.
Stage stage = new Stage(); stage.setX(50); stage.setY(50);
Обратите внимание, что может потребоваться также установить ширину и высоту рабочей области, если вы установите положение X и Y, иначе ее окно может стать очень маленьким.
Ширина и Высота
Вы можете установить ширину и высоту помощью методов setWidth() и setHeight().
Stage stage = new Stage(); stage.setWidth(600); stage.setHeight(300);
Модальность
Модальность определяет, будет ли окно, представляющее Stage, блокировать другие окна, открытые тем же приложением. Вы устанавливаете модальность окна через метод initModality().
public class StageExamples extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX App");
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
//stage.initModality(Modality.WINDOW_MODAL);
//stage.initModality(Modality.NONE);
primaryStage.show();
stage.showAndWait();
}
}
Обратите внимание, что этот пример является полноценным приложением. Метод start() выполняется при запуске приложения JavaFX (вызывается первый метод main(), который вызывает метод launch(), а затем — метод start()).
Обратите также внимание на то, как создается новый объект JavaFX Stage, устанавливается его режим модальности, а затем и основной, и новый объекты Stage становятся видимыми (показаны). Второй этап имеет модальность, установленную на Modality.APPLICATION_MODAL, что означает, что он будет блокировать все другие окна (Stage), открытые этим приложением. Вы не можете получить доступ к ним, пока это окно рабочей области не будет закрыто.
Опция модальности Modality.WINDOW_MODAL означает, что вновь созданный Stage будет блокировать окно рабочей области, которое «владеет» новым созданным Stage, но только этой. Не все окна в приложении.
Опция модальности Modality.NONE означает, что этот Stage не будет блокировать любые другие окна, открытые в этом приложении.
Режимы модальности Modality.APPLICATION_MODAL и Modality.WINDOW_MODAL полезны для объектов Stage, представляющих окна, которые функционируют как «мастера» или «диалоги», блокирующие приложение или окно до тех пор, пока пользователь не завершит процесс мастера или диалога. Модальность Modality.NONE полезна для объектов Stage, представляющих окна, которые могут сосуществовать, например, разные окна браузера в приложении браузера.
Владелец
Stage может принадлежать другому Stage. Вы устанавливаете владельца рабочей области с помощью метода initOwner().
public class StageExamples extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX App");
Stage stage = new Stage();
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(primaryStage);
primaryStage.show();
stage.showAndWait();
}
}
В этом примере откроется новый Stage, который заблокирует Stage, владеющий только что созданным Stage (который установлен на основной Stage).
Стиль
Вы можете установить стиль с помощью метода initStyle(). Существует множество различных стилей, которые вы можете выбрать:
- DECORATED — это стандартное окно с декорациями ОС (строка заголовка и кнопки «Свернуть / Развернуть / Закрыть») и белым фоном.
- UNDECORATED — это стандартное окно без декораций ОС, но с белым фоном.
- TRANSPARENT — это неокрашенное окно с прозрачным фоном.
- UNIFIED похожа на DECORATED, за исключением того, что она не имеет границы между областью декорации и областью основного контента.
- UTILITY представляет собой декорированное окно, но с минимальными декорациями.
Вот пример настройки стиля:
stage.initStyle(StageStyle.DECORATED); //stage.initStyle(StageStyle.UNDECORATED); //stage.initStyle(StageStyle.TRANSPARENT); //stage.initStyle(StageStyle.UNIFIED); //stage.initStyle(StageStyle.UTILITY);
Только первая строка на самом деле выполняется. Остальные закомментированы. Они просто показывают, как настроить другие параметры.
Полноэкранный режим
Вы можете переключить Stage в полноэкранный режим с помощью метода Stage setFullScreen().
Обратите внимание, что вы можете не получить ожидаемый результат (окно в полноэкранном режиме), если не установите Scene на Stage.
Вот пример:
VBox vbox = new VBox(); Scene scene = new Scene(vbox); primaryStage.setScene(scene); primaryStage.setFullScreen(true); primaryStage.show();
