我有一个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始终位于其他所有应用程序之上。
答案 0 :(得分:1)
这取决于操作系统。一般情况下,您不能保证您的窗口在本机窗口时始终位于顶部,您也不应该。任务经理总是充满理由。
我记得有些版本的Vista和较旧的Windows系统允许这样做,原生和Java窗口最终争夺焦点。