Für meine Anwendung muss ich wissen, wann das Fenster der App fokussiert wird oder nicht. Dafür kann ich primaryStage.focusedProperty().addListener(..)
verwenden, was mich vor Änderungen im Fokus der Bühne warnt.javafx - Alarm- und Bühnenfokus
Aber ich habe erkannt, dass eine Alert
mit diesem primaryStage
als Eigentümer zu öffnen und mit Modalität auf WINDOW_MODAL
macht die primaryStage
lose Fokus (auch wenn das Fenster in Wirklichkeit fokussiert ist, oder zumindest in Windows).
Jetzt das Problem, das ich habe, ist, dass ich wissen will, wenn die Window
konzentriert ist und nicht nur die ; oder zumindest wissen, ob der Alert
fokussiert ist, aber ich konnte nicht finden, wie.
Ich habe versucht, ähnliche Eigenschaften in der Warnung (wie onShowing
und onHiding
) ohne Erfolg zu verwenden.
Hier ist ein Stück Code, um mein Problem zu veranschaulichen:
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.focusedProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("primaryStage focused : "+newValue);
});
primaryStage.show();
//create a basic alert
Alert alert = new Alert(Alert.AlertType.INFORMATION,"This is a test");
alert.initModality(Modality.WINDOW_MODAL); //will block input to its owner window
alert.initOwner(primaryStage);
alert.onShowingProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("alert onShowing : "+newValue);
});
alert.onShownProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("alert onShown : "+newValue);
});
alert.onHidingProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("alert onHiding : "+newValue);
});
alert.onHiddenProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("alert onHidden : "+newValue);
});
alert.showAndWait();
}
public static void main(String[] args) {
launch(args);
}
}
Grundsätzlich wird es dieses Motiv:
primaryStage focused : true //stage is created and displayed
primaryStage focused : false //alert is displayed, stage loses focus. alt+tab changes nothing
primaryStage focused : true //alert closed by pressing 'ok'
die wegen aller anderen Drucke seltsam ist, dass sie produzieren soll. Auch ideal wäre ich brauche:
primaryStage focused : true //stage is created and displayed
primaryStage focused : false //alert is displayed, stage loses focus
alert focused : true //alert gains focus
alert focused : false //alt+tab to an other window
alert focused : true //alt+tab back to this window
alert focused : false //alert closed by pressing 'ok'
primaryStage focused : true //stage regains focus
oder etwas ähnliches. Hat jemand eine Idee, dies zu erreichen, oder ist das primaryStage
Fokus auf WINDOW_MODAL
Alert
verlieren ein Problem, das ich melden sollte?