Empêcher le déplacement d'une fenêtre avec JavaFX
Cette astuce permet de verouiller la fenêtre à un emplacement.
Cette astuce est utile pour les splash screens (fenêtres d'attente) ou des notifications ou des fenêtres modales ou tout autre élément censé être indéplaçable.
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class App extends Application {
private static double WINDOW_WIDTH = 350;
private static double WINDOW_HEIGHT = 350;
@Override
public void start(Stage stage) {
Scene scene = new Scene(new VBox(), WINDOW_WIDTH, WINDOW_HEIGHT);
scene.setFill(Color.DIMGREY);
stage.setScene(scene);
/*
* Cache la barre de la fenêtre. Empêche le déplacement avec la barre de titre
*/
stage.initStyle(StageStyle.UNDECORATED);
/*
* Empêche le redimensionnement de la fenêtre quand la fenêtre est déplacée sur
* les bords de l'écran
*/
stage.setMinWidth(WINDOW_WIDTH);
stage.setMinHeight(WINDOW_HEIGHT);
stage.setMaxWidth(WINDOW_WIDTH);
stage.setMaxHeight(WINDOW_HEIGHT);
/* Empêche le redimensionnement de la fenêtre */
stage.setResizable(false);
/* Affiche la fenêtre */
stage.show();
/* Centre la fenêtre à l'écran */
Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
double centerX = (primaryScreenBounds.getWidth() - stage.getWidth()) / 2;
double centerY = (primaryScreenBounds.getHeight() - stage.getHeight()) / 2;
stage.setX(centerX);
stage.setY(centerY);
/* Empêche le déplacement de la fenêtre avec la touche ALT ou ALT + Espace */
/* Chaque fois que la position X de la fenêtre est changée */
stage.xProperty().addListener((obs, oldY, newY) -> {
System.out.println(stage.getX() + " " + stage.getY());
/* On centre la fenêtre en X */
stage.setX(centerX);
});
/* Chaque fois que la position Y de la fenêtre est changée */
stage.yProperty().addListener((obs, oldY, newY) -> {
System.out.println(stage.getX() + " " + stage.getY());
/* On centre la fenêtre en Y */
stage.setY(centerY);
});
}
public static void main(String[] args) {
launch();
}
}
Commentaires
Enregistrer un commentaire