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,没有任何方法可以在代码中检测到这一点。