JavaFX Probleme mit WindowEvent

ImperatorMing

Mitglied
Hallo Freunde der Nacht,

Ich habe mir einen eigenen EventHandler geschrieben, der macht nichts schlaues, sondern dient nur Testzwecken um mein Verständniss zu verbessern. Leider kenne ich die tags zum javaCode formatieren nicht, vielleicht kann mir die mal Jemand verraten. Ich zeige den Code jetzt trotzdem, so sieht er aus:

import javafx.event.EventHandler;
import javafx.stage.WindowEvent;

public class JavaFXMyWindowListener implements EventHandler<WindowEvent>{

@Override
public void handle(WindowEvent event) {

System.out.println("WindowEvent: " + event.getEventType());

if(event.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST){
System.out.println("Das Fenster wird geschlossen");
event.consume();
}

if(event.getEventType() == WindowEvent.WINDOW_SHOWING){
System.out.println("Window aktiv");
}

if(event.getEventType() == WindowEvent.WINDOW_SHOWN){
System.out.println("Das Fenster wurde geoeffnet");
}

if(event.getEventType() == WindowEvent.WINDOW_HIDDEN){
System.out.println("Das Fenster wurde minimiert");
}

if(event.getEventType() == WindowEvent.WINDOW_HIDING){
System.out.println("Das Fenster wird minimiert");
}

}

}

Das Problem bezieht sich auf die letzten beiden If Anweisungen. WINDOW_HIDDEN & WINDOW_HIDING scheinen nicht zu funktionieren. Wenn ich diese Aktionen durchführe, kommt das entsprechende System out nicht, bei den anderen drei Event Typen scheint das aber zu funktionieren.
Ich habe ein Workaround gefunden, das funktioniert wen man es in der Hauptklasse an die Stage anfügt, das sieht so aus:
stage.iconifiedProperty().addListener(new ChangeListener<Boolean>() {
@Override public void changed(ObservableValue<? extends Boolean> prop, Boolean oldValue, Boolean newValue) {
System.out.println("Iconified? " + newValue);
}
});

Aber muss ich das wirklich so machen? wozu gibt es denn WINDOW_HIDDEN & WINDOW_HIDING wenn sie nicht funktionieren? Danke für eure Hilfe, und wenn mir jemand die Code Tags verrät bringe ich das sofort in ordnung.
 
Ja, sieht wohl dannach aus .... dann jetzt das ganze nochmal in diesem Thread. Ich hoffe nach diesem ganzen durcheinander meldet sich irgendwann trotzdem noch jemand mit einer Antwort. Jemand sollte mal den "Bitte lesen" thread überarbeiten und reinschreiben wie die code tags sind.

Hier der EventHandler:
Java:
package windowlistener1;

import javafx.event.EventHandler;
import javafx.stage.WindowEvent;

/**
 * Just a EventHandler for Handling WindowEvents.
 */
public class JavaFXMyWindowListener implements EventHandler<WindowEvent>{

    @Override
    public void handle(WindowEvent event) {
       
        System.out.println("WindowEvent: " +  event.getEventType());
       
        if(event.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST){
            System.out.println("Das Fenster wird geschlossen");
            event.consume();
        }
       
        if(event.getEventType() == WindowEvent.WINDOW_SHOWING){
            System.out.println("Window aktiv");
        }
       
        if(event.getEventType() == WindowEvent.WINDOW_SHOWN){
            System.out.println("Das Fenster wurde geoeffnet");
        }
       
        if(event.getEventType() == WindowEvent.WINDOW_HIDDEN){
            System.out.println("Das Fenster wurde minimiert");
        }
       
        if(event.getEventType() == WindowEvent.WINDOW_HIDING){
            System.out.println("Das Fenster wird minimiert");
        }
       
    }

}

Und hier die dazugehörige start methode:
Java:
package windowlistener1;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

/**
 * Demonstrating the usage of a EventHandler
 */
public class JavaFXWindowListenerTest extends Application{

    @Override
    public void start(Stage stage) throws Exception {

        // First argument sets for which events the second argument (the handler) is needed.
        stage.addEventHandler(WindowEvent.ANY, new JavaFXMyWindowListener());

        // set the iconfied property
        stage.iconifiedProperty().addListener(new ChangeListener<Boolean>() {
             @Override public void changed(ObservableValue<? extends Boolean> prop, Boolean oldValue, Boolean newValue) {
                 if(newValue){
                     System.out.println("Das Fenster wird minimiert");
                 }else{
                     System.out.println("Das Fenster war minimiert und wurde wieder hergestellt");
                 }
             }
        });
       
        // Nothin we could see, just to fit the constructor of "Scene"
        Label label = new Label("");
       
        // set the stage
        Scene scene = new Scene(label, 200, 150);
        stage.setTitle("MainWindow");
        stage.setScene(scene);
        stage.sizeToScene();
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 

Neue Themen


Zurück
Oben