Открытие нового окна (window) в JavaFX

1- Window в JavaFX

В  JavaFX чтобы создать окно (window) используйте класс  Stage (Сцена).
Существует 3 вида модальости(modelity), которые вы можете применить для  Stage через метод  stage.initModality(Modelity).
  • Modelity.NONE
  • Modelity.WINDOW_MODAL
  • Modelity.APPLICATION_MODAL
При создании нового  Stage, вы можете настроить для него родительское окно (Так же называется окно, которое владеет им), через метод  stage.initOwner(parentStage).
No Модальность Описание
1 Modelity.NONE Когда вы открываете новое окно с этой модальностью (modelity), новое окно будет независимым по отношению к родительскому окну. Вы можете интерактировать с родительским окном, или закрыть его не влияя на новое окно.
2 Modelity.WINDOW_MODAL Когда вы открываете новое окно с этой модальностью (modelity), новое окно блокирует родительское окно. Вы не можете интерактировать с родительским окном, до тех пор, пока это окно не закроется.
3 Modelity.APPLICATION_MODAL Когда вы открываете новое окно с этой модальностью (modelity), оно блокирует все другие окна приложения. Вы не можете интерактировать ни с каким окном, до тех пор пока это окно не закроется.

2- Например, откройте Modeless Window

Например, когда вы нажимете на Button на окне 1, он откроет второе окно с модальностью (modelity) по умолчанию ( Modeless Window / Modelity.NONE).
OpenNewModelessWindowExample.java
package org.o7planning.javafx.window;

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

public class OpenNewModelessWindowExample extends Application {

	@Override
	public void start(final Stage primaryStage) {

		Button button = new Button();
		button.setText("Open a New Window");

		button.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {

				Label secondLabel = new Label("I'm a Label on new Window");

				StackPane secondaryLayout = new StackPane();
				secondaryLayout.getChildren().add(secondLabel);

				Scene secondScene = new Scene(secondaryLayout, 230, 100);

				// New window (Stage)
				Stage newWindow = new Stage();
				newWindow.setTitle("Second Stage");
				newWindow.setScene(secondScene);

				// Set position of second window, related to primary window.
				newWindow.setX(primaryStage.getX() + 200);
				newWindow.setY(primaryStage.getY() + 100);

				newWindow.show();
			}
		});

		StackPane root = new StackPane();
		root.getChildren().add(button);

		Scene scene = new Scene(root, 450, 250);

		primaryStage.setTitle("JavaFX Open a new Window (o7planning.org)");
		primaryStage.setScene(scene);
		primaryStage.show();
	}

	public static void main(String[] args) {
		launch(args);
	}

}

3- Например, откроем Modal Window

Например, когда вы нажимете на Button на окне 1, он откроет новое окно с модальностью  Modal Window ( Modelity.WINDOW_MODAL). Когда еще отображается новое окно, вы не можете интерактировать с родительским окном.
OpenNewModelWindowExample.java
package org.o7planning.javafx.window;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class OpenNewModelWindowExample extends Application {

   @Override
   public void start(final Stage primaryStage) {

      Button button = new Button();
      button.setText("Open a New Window");

      button.setOnAction(new EventHandler<ActionEvent>() {

         @Override
         public void handle(ActionEvent event) {

            Label secondLabel = new Label("I'm a Label on new Window");

            StackPane secondaryLayout = new StackPane();
            secondaryLayout.getChildren().add(secondLabel);

            Scene secondScene = new Scene(secondaryLayout, 230, 100);

            // New window (Stage)
            Stage newWindow = new Stage();
            newWindow.setTitle("Second Stage");
            newWindow.setScene(secondScene);

            // Specifies the modality for new window.
            newWindow.initModality(Modality.WINDOW_MODAL);

            // Specifies the owner Window (parent) for new window
            newWindow.initOwner(primaryStage);

            // Set position of second window, related to primary window.
            newWindow.setX(primaryStage.getX() + 200);
            newWindow.setY(primaryStage.getY() + 100);

            newWindow.show();
         }
      });

      StackPane root = new StackPane();
      root.getChildren().add(button);

      Scene scene = new Scene(root, 450, 250);

      primaryStage.setTitle("JavaFX Open a new Window (o7planning.org)");
      primaryStage.setScene(scene);
      primaryStage.show();
   }

   public static void main(String[] args) {
      launch(args);
   }

}