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) {};
}
8条答案
按热度按时间kb5ga3dv1#
"这是不可能的"
例如,Windows任务管理器,即使设置为“始终在最前面”,也会被全屏应用程序覆盖。
这是因为全屏应用程序通常使用不同的图形上下文,并且不能被覆盖。
ryoqjall2#
启动另一个进程来检查窗口是否在最上面,如果没有,就把它设置在最上面。
rfbsl7qr3#
这是一个示例代码,应该会有所帮助
参考This forum post
hk8txs484#
这听起来像是Raymond Chen在Link上经常要回答的问题。你怎么能真的真的永远把一个窗口放在前台呢?你不能。因为如果其他人的窗口用同样的技巧永远把自己放在前台会怎么样?谁赢了?
k4emjkb15#
如果你指的是DirectX/OpenGL之类的全屏,我不确定你是否真的能(或者应该)实现它。大多数操作系统在全屏时都会禁用本机窗口,以提高渲染性能。Swing通过本机窗口工具包工作。
你可以写一个定时器,在短时间间隔内(例如200 ms)指示你的窗口回到顶部,这取决于你的操作系统,这可能正是你所需要的,也可能是性能问题或 Flink 的可怕原因。
p8ekf7hl6#
我不知道,但我敢打赌,全屏窗口也有总是在顶部设置为真,在这种情况下,你已经陷入了未定义行为的领域。2一般来说,当两个窗口被设置为总是在最上面时,排序是没有保证的。3我认为一般来说,虽然顺序只是取决于它们被设置为总是在最上面的顺序。所以在这种情况下,我只会等到应用程序全屏显示,将其设置为始终在顶部,看看是否有效。
在其他情况下,我看到人们开始线程,然后偶尔重置弗拉姆,以始终在顶部。
所有这些解决方案都很丑陋,所以只使用一个让你晚上睡觉。
xesrikrc7#
我知道这个帖子很老了,但是我遇到了这个问题,我找到了一个令人满意的解决方案。我的程序有一些通知,我希望总是在顶部,但是当一部电影进入全屏时,它们就消失了。幸运的是,我的程序每5秒更新一次这些通知,如果我在这些JWindows上调用setVisible(true),那么在每次更新时,它们都会重新获得顶部位置,如果它们失去了顶部位置的话。
8yparm6h8#
我想做同样的事情OP,有我的应用程序在前台运行,而我的游戏运行。它不工作在全屏,但如果你把游戏到窗口模式,并调整窗口设置,以适应您的电视它的工作。我只需要框架。setAlwaysOnTop使其工作。