Ouvrir une nouvelle fenêtre (Window) dans JavaFX
View more Tutorials:


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