devstory

Ouvrir une nouvelle fenêtre (Window) dans JavaFX

  1. Window dans  JavaFX
  2. Exemple, Ouvrez une Modeless Window
  3. Exemple, ouvrir une Model Window

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);
   }

}

Tutoriels de JavaFX

Show More