Java 全屏覆盖

Java 全屏覆盖,java,javafx,overlay,Java,Javafx,Overlay,目前,我正在尝试创建一个显示在屏幕角落的计时器。我希望它显示,即使目前有一个全屏幕的应用程序运行。目前我已经尝试了Stage#setAlwaysOnTop(true),但是,这只适用于正常应用程序,而不是全屏幕应用程序 package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene

目前,我正在尝试创建一个显示在屏幕角落的计时器。我希望它显示,即使目前有一个全屏幕的应用程序运行。目前我已经尝试了
Stage#setAlwaysOnTop(true)
,但是,这只适用于正常应用程序,而不是全屏幕应用程序

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

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

        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        stage.setTitle("Timer");
        stage.setScene(new Scene(root, 300, 275));
        stage.setAlwaysOnTop(true);

        stage.show();
    }


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

这是IntelliJ的标准JavaFX示例,但是有一个修改是
Stage#setAlwaysOnTop(true)
。我如何让它在全屏上运行,或者至少在任何应用程序上都保持无所不在。

当我这样做时,它会像预期的那样保持在全屏应用程序的顶部(虽然不是全屏独占模式下的应用程序,也不是预期的那样)。如果你想让它一直保持在顶部,那么用JavaFX就不能真正做到这一点。这种控制是在操作系统级别完成的。您可以让它工作的最好机会是使用JNAAPI。默认情况下,大多数操作系统都会让请求最多的最新进程成为“真正”最多的应用程序。只要你的应用程序不再是“真正的”顶级应用程序,你就可以调用
setAlwaysOnTop(false)
setAlwaysOnTop(true)
,但我认为没有JNA,没有任何方法可以在代码中检测到这一点。