devstory

Ouvrir une nouvelle fenêtre (Window) dans JavaFX

View more Tutorials:

Site d'apprentissage des langues gratuit:
Suivez-nous sur notre fanpage pour recevoir des notifications chaque fois qu'il y a de nouveaux articles. Facebook

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).
NoModeDescription
1Modelity.NONELorsque 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.
2Modelity.WINDOW_MODALLorsque 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.
3Modelity.APPLICATION_MODALLorsque 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 Tutorials: