Ist in Java FX ein Event-Handler vorhanden, wenn ich ein Fenster direkt durch Drücken der [X] -Taste oben rechts schließe? Welche Ereignisse werden in diesem Fall ausgelöst? Nichts funktioniert so weit, weder setOnHiding
noch setOnCloseRequest()
Was ich will ist, wenn ich schließe (durch Klicken auf [X] -Taste) ShowLogin Bildschirm, ShowSplashScreen sollte auch geschlossen werden.Welches Ereignis wird aufgerufen, wenn ich einen Bildschirm schließe, indem ich auf [X] roten Knopf von Windows klicke?
Bitte helfen.
Hier meinen Code anhängen.
@Override
public void start(Stage primaryStage) {
....
......
.......
this.primaryStage = primaryStage;
if (userCredentials == null) {
showSplashScreen();
showLoginScreen();
} else {
showAppointmentScreen();
}
}
private void showSplashScreen(){
primaryStageSplash = new Stage();
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/SplashScreen.fxml"), bundle);
primaryStageSplash.setResizable(false);
primaryStageSplash.initStyle(StageStyle.UNDECORATED);
primaryStageSplash.centerOnScreen(); // center on screen
fxmlLoader.setControllerFactory(paramClass -> context.getBean(paramClass));
try {
BorderPane root = new BorderPane(fxmlLoader.load());
scene = new Scene(root, 445, 299);
//scene.getStylesheets().add(DeliveryManager.class.getResource("/css/main.css").toExternalForm());
primaryStageSplash.setScene(scene);
primaryStageSplash.show();
} catch (IOException ex) {
errorHandler.escalateCriticalFailure(ex);
}
}
private void showLoginScreen() {
primaryStage = new Stage();
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/LoginForm.fxml"), bundle);
primaryStage.setMaxHeight(125.0);
primaryStage.setMaxWidth(255.0);
primaryStage.setResizable(false);
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.initModality(Modality.APPLICATION_MODAL);
primaryStage.centerOnScreen(); // center on screen
//Set the title from the resources.
primaryStage.setTitle((String) bundle.getObject("UserInterface.LoginForm.Label.Title"));
fxmlLoader.setControllerFactory(paramClass -> context.getBean(paramClass));
if(operatingMode.equals(OperatingMode.REPRINT)) {
primaryStage.getIcons().add(new Image("/images/reprint_utility_icon.png"));
}
else {
primaryStage.getIcons().add(new Image("/images/delivery_manager_icon.png"));
}
try {
BorderPane root = new BorderPane(fxmlLoader.load());
scene = new Scene(root, 270, 180);
root.setOnMousePressed(new MousePressHandler());
root.setOnMouseDragged(new MouseDragHandler());
scene.getStylesheets().add(DeliveryManager.class.getResource("/css/main.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException ex) {
errorHandler.escalateCriticalFailure(ex);
}
}
@Override
public void stop(){
Event event = new Event(null, primaryStage,null);
((Node)(event.getSource())).getScene().getWindow().hide();
event = new Event(null, primaryStageSplash,null);
((Node)(event.getSource())).getScene().getWindow().hide();
//primaryStageSplash.close();
}
`
[WindowEvent] (https://docs.oracle.com/javase/8/javafx/api/javafx/stage/WindowEvent.html) wird ausgelöst, wenn Sie auf das X auf den Fenstersymbolen klicken. Sie können das Fenster von Ihrer Szene mit 'scene.getWindow()' erhalten, werfen Sie einen Blick auf die [Szene] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html) # getWindow--) class – NwDev
Der 'onHidden'-Handler wird immer aufgerufen, wenn das Fenster geschlossen wird (es ist jedoch geschlossen). Der 'onCloseRequest' -Handler wird immer dann aufgerufen, wenn ein * externer * Aufruf zum Schließen des Fensters erfolgt, z. B. wenn der Benutzer auf die Schaltfläche zum Schließen der OS-Ebene klickt. (Ihre Anmeldephase hat keine davon, da Sie den Stil auf "UNDECORATED" gesetzt haben.) Wenn diese für Sie nicht funktionieren, müssen Sie Ihren Versuch, sie zu verwenden, einbinden (dh ein [MCVE] bereitstellen) Dein geposteter Code, sonst kann niemand wissen, was du falsch machst. –
Ihre 'Stop'-Methode macht absolut keinen Sinn, übrigens. Sie erstellen zwei Ereignisse mit 'null' als Ereignisquelle und versuchen dann, 'getSource() 'für sie aufzurufen. Es ist nicht einmal klar, was der Punkt dieser Methode ist: 'stop()' wird aufgerufen, wenn die Anwendung beendet wird, so dass die Fenster trotzdem geschlossen werden. –