Ouvrir une nouvelle fenêtre (Window) dans JavaFX

View more categories:

1- Window dans  JavaFX

Dans  JavaFX pour créer une fenêtre (window) vous devez utiliser la classe  Stage (Scène).
Il existe 3 modes (modelity) que vous pouvez appliquer à  Stage via la méthode  stage.initModality(Modelity).
  • Modelity.NONE
  • Modelity.WINDOW_MODAL
  • Modelity.APPLICATION_MODAL
Lorsque vous créez une nouvelle  Stage, vous pouvez configurer sa fenêtre principale (qui est également appelée comme la fenêtre propriétaire), via la méthode  stage.initOwner(parentStage).
No Mode Description
1 Modelity.NONE Lorsque vous ouvrez une nouvelle fenêtre avec ce mode (modelity), la nouvelle fenêtre sera indépendante de la fenêtre parente. Vous pouvez interagir avec la fenêtre parente ou la fermer sans affecter la nouvelle fenêtre.
2 Modelity.WINDOW_MODAL Lorsque vous ouvrez une nouvelle fenêtre avec ce mode (modelity), elle verrouille la fenêtre parente. Vous ne pouvez pas interagir avec la fenêtre parent tant que cette fenêtre n'est pas fermée.
3 Modelity.APPLICATION_MODAL Lorsque vous ouvrez une nouvelle fenêtre avec ce mode (modelity), elle fermera toutes les fenêtres de l'application. Vous ne pouvez pas interagir avec la fenêtre parent tant que cette fenêtre n'est pas fermée.

2- Exemple, Ouvrez une Modeless Window

Par exemple, lorsque vous appuiez sur un bouton de la fenêtre 1, il ouvrira la deuxième fenêtre avec le mode (modelity) par défaut ( 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- Exemple, ouvrir une Model Window

Par exemple, lorsque vous cliquez sur un bouton de la première fenêtre, elle ouvira une nouvelle fenêtre avec le mode  Modal Window ( Modelity.WINDOW_MODAL). Lorsque cette nouvelle fenêtre encore affiche sur l'écran, vous ne pouvez pas interagir avec la fenêtre parente.
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);
   }

}

View more categories: