总是在顶部窗口

时间:2010-06-16 17:56:02

标签: java swing jframe

我正在寻找一个解决方案,以便始终将JFrame保持在最顶层,并始终始终是我的意思。

setAlwaysOnTop( true );

当我以全屏模式启动游戏时,这不起作用。我知道你通常不希望你的窗户保持在最顶层,但在这种情况下它是必需的。

8 个答案:

答案 0 :(得分:4)

无法做到这一点。

例如,即使设置为Always on Top,Windows任务管理器也会被全屏应用程序掩盖。

这是因为全屏应用程序通常使用不同的图形上下文而无法覆盖。

答案 1 :(得分:2)

启动另一个进程以检查窗口是否在顶部,如果没有,则将其设置在顶部。

答案 2 :(得分:1)

这听起来像雷蒙德·陈总是要在http://blogs.msdn.com/b/oldnewthing/回答这个问题。你怎么能真的永远真实地保持一个窗口在前台?你不能。因为如果ELSE的某个窗口使用相同的技巧来保持自己始终永远在前台,会发生什么?哪一个获胜?

答案 3 :(得分:1)

这是一个应该有用的示例代码

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

答案 4 :(得分:0)

如果您的意思是全屏,就像在DirectX / OpenGL中那样,我不确定您是否可以(或应该)真正实现它。大多数操作系统在全屏幕期间禁用其原生窗口以提高渲染性能。 Swing通过本机窗口工具包工作。

您可以编写使用计时器的内容,并在短时间间隔(例如200毫秒)指示您的窗口转到顶部。这取决于您的操作系统,这正是您所需要的,或者是性能故障或闪烁的可怕原因。

答案 5 :(得分:0)

我不确定,但我敢打赌,Fullscreen窗口也将Always On Top设置为true,在这种情况下,你偶然发现了未定义行为的领域。通常,当两个窗口始终位于顶部时,无法保证订购。我认为总的来说,顺序只取决于它们设置为始终排在最前面的顺序。因此,在这种情况下,我会等到应用程序全屏显示,将其设置为始终位于顶部,看看是否有效。

在其他情况下,我见过人们开始线程,然后偶尔重置fram总是在顶部。

所有这些解决方案都很难看,所以只需使用让你晚上睡觉的解决方案。

答案 6 :(得分:0)

我知道这篇文章很老,但我遇到了这个问题,我找到了一个令人满意的解决方案。 我的程序有一些通知,我希望永远在顶部,但当一部电影进入全屏时,它们就消失了。幸运的是,我的程序每隔5秒更新一次这些通知,如果我在这些JWindows上调用setVisible(true),则在每次更新时,如果它们丢失了,它们将重新获得最高位置。

答案 7 :(得分:-1)

我希望与OP做同样的事情,让我的应用程序在我的游戏运行时在前台运行。它并不是全屏工作,但是如果你把游戏置于窗口模式并调整窗口设置以适应你的电视它就可以工作。我只需要frame.setAlwaysOnTop就可以了。