私のアプリケーションでは、アプリケーションのウィンドウがフォーカスされているかどうかを知る必要があります。このために、私はprimaryStage.focusedProperty().addListener(..)
を使うことができます。ステージの焦点の変化を警告します。javafx - 警告とステージフォーカス
しかし、私は(ウィンドウが現実に焦点を当てた、あるいは少なくともWindowsでされていても)所有者として、またWINDOW_MODAL
に設定モダリティと、このprimaryStage
でAlert
を開くとprimaryStage
緩い焦点になることを実現しています。
今私が持っている問題は、Window
がいつフォーカスされているのかを知りたいということです。primaryStage
だけでなく、少なくともAlert
に焦点が当てられているかどうかは分かっていますが、どのように見つけられませんでしたか?
アラートにsimilareプロパティ(onShowing
、onHiding
など)を使用すると、正常に機能しませんでした。
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);
}
}
は、基本的にはこれを印刷します:なぜならそれは生成する必要があり、他の全てのプリントの奇妙である
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'
ここ
は私の問題を説明するためのコードの一部です。 また、理想的に私は必要があります: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
またはそれに類するものです。誰もこれを達成するアイデアを持っているか、これはWINDOW_MODAL
Alert
にフォーカスを失っていますか?