java 始终在顶部窗口

tv6aics1  于 2023-01-07  发布在  Java
关注(0)|答案(8)|浏览(220)

我正在寻找一个解决方案,以保持JFrame总是在顶部,我的意思是总是。

setAlwaysOnTop( true );

当我在全屏模式下开始游戏时,这个功能不起作用。我知道你通常不想让你的窗口保持在最上面,但在这种情况下,这是必需的。

kb5ga3dv

kb5ga3dv1#

"这是不可能的"
例如,Windows任务管理器,即使设置为“始终在最前面”,也会被全屏应用程序覆盖。
这是因为全屏应用程序通常使用不同的图形上下文,并且不能被覆盖。

ryoqjall

ryoqjall2#

启动另一个进程来检查窗口是否在最上面,如果没有,就把它设置在最上面。

rfbsl7qr

rfbsl7qr3#

这是一个示例代码,应该会有所帮助

public class AllWaysOnTop extends JFrame implements WindowListener {

    AllWaysOnTop() {
        // Code to setup your frame
        addWindowListener(this);
        // Code to show your frame
    }

    // The window event handlers. We use WindowDeactivated to
    // try and keep the splash screen on top. Usually only keeps
    // the splash screen on top of our own java windows.
    public void windowOpened(WindowEvent event){};
    public void windowActivated(WindowEvent event){};
    public void windowDeactivated(WindowEvent event){
        toFront();
    }
    public void windowIconified(WindowEvent event){};
    public void windowDeiconified(WindowEvent event){};
    public void windowClosed(WindowEvent event){};
    public void windowClosing(WindowEvent event) {};
}

参考This forum post

hk8txs48

hk8txs484#

这听起来像是Raymond Chen在Link上经常要回答的问题。你怎么能真的真的永远把一个窗口放在前台呢?你不能。因为如果其他人的窗口用同样的技巧永远把自己放在前台会怎么样?谁赢了?

k4emjkb1

k4emjkb15#

如果你指的是DirectX/OpenGL之类的全屏,我不确定你是否真的能(或者应该)实现它。大多数操作系统在全屏时都会禁用本机窗口,以提高渲染性能。Swing通过本机窗口工具包工作。
你可以写一个定时器,在短时间间隔内(例如200 ms)指示你的窗口回到顶部,这取决于你的操作系统,这可能正是你所需要的,也可能是性能问题或 Flink 的可怕原因。

p8ekf7hl

p8ekf7hl6#

我不知道,但我敢打赌,全屏窗口也有总是在顶部设置为真,在这种情况下,你已经陷入了未定义行为的领域。2一般来说,当两个窗口被设置为总是在最上面时,排序是没有保证的。3我认为一般来说,虽然顺序只是取决于它们被设置为总是在最上面的顺序。所以在这种情况下,我只会等到应用程序全屏显示,将其设置为始终在顶部,看看是否有效。
在其他情况下,我看到人们开始线程,然后偶尔重置弗拉姆,以始终在顶部。
所有这些解决方案都很丑陋,所以只使用一个让你晚上睡觉。

xesrikrc

xesrikrc7#

我知道这个帖子很老了,但是我遇到了这个问题,我找到了一个令人满意的解决方案。我的程序有一些通知,我希望总是在顶部,但是当一部电影进入全屏时,它们就消失了。幸运的是,我的程序每5秒更新一次这些通知,如果我在这些JWindows上调用setVisible(true),那么在每次更新时,它们都会重新获得顶部位置,如果它们失去了顶部位置的话。

8yparm6h

8yparm6h8#

我想做同样的事情OP,有我的应用程序在前台运行,而我的游戏运行。它不工作在全屏,但如果你把游戏到窗口模式,并调整窗口设置,以适应您的电视它的工作。我只需要框架。setAlwaysOnTop使其工作。

相关问题