【发布时间】:2016-04-01 14:39:43
【问题描述】:
我有一个需要始终位于其他应用程序之上的 JFrame。为此,我正在使用Window 类的setAlwaysOnTop() 方法。
这是我的代码:
class Test1 extends JFrame {
public Test1() {
initComponents();
setTitle("Top Window");
setAlwaysOnTop(true);
}
private void initComponents() {
jLabel1 = new JLabel();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setText("I am a top most window");
getContentPane().add(jLabel1, BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Test1().setVisible(true);
}
});
}
private javax.swing.JLabel jLabel1;
}
这适用于其他一些应用程序,例如记事本、资源管理器等,即当我的应用程序位于记事本之上时,一切正常。
但是当我的 java 应用程序超过任何已经在顶部的应用程序时,例如 任务管理器。然后setAlwaysOnTop() 方法不起作用。
我需要的是任何能让我的应用程序始终处于领先地位的方法。
我还在 stackoverflow 上搜索了许多其他相关帖子,但似乎没有一个回答我的问题。我也尝试过其他方法,例如覆盖windowDeactivated(WindowEvent e) 方法
addWindowListener(new WindowAdapter(){
@Override
public void windowDeactivated(WindowEvent e) {
toFront();
//requestFocus();
//requestFocusInWindow();
}
});
但这也不起作用。
除了全屏应用程序之外,还有什么其他方法可以让我的 JFrame 始终位于所有其他应用程序之上。
【问题讨论】:
-
这取决于操作系统,您无法控制它。当两个窗口设置为
alwaysOnTop时,(来自Java)是不可预测的,哪个窗口实际上更高 -
JFrame 完全忽略了 setAlwaysOnTop(),这是关于基本的 JDialogs 功能
-
“但是当我的 java 应用程序超过任何已经在顶部的应用程序时,例如任务管理器。然后方法 setAlwaysOnTop() 不起作用” ..让你吃惊?!?令我惊讶的是,任何人都希望 x-plat 插件在“始终处于领先地位”方面做很多“战斗”..
-
@MadProgrammer 那么除了使用本机api之外,还有其他方法可以实现这一点。
-
@PankajPrakashh 我也看不到解决问题的本机解决方案