如何将窗口始终设置在任何其他应用程序之上

时间:2015-12-27 15:19:48

标签: java swing jframe window

我有一个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;
}

这适用于其他一些应用程序,如记事本,资源管理器等,即当我的应用程序在记事本上方时,一切正常。

enter image description here

但是当我的java应用程序超越任何已经位于顶层的应用程序时,例如任务管理器。然后方法setAlwaysOnTop()不起作用。

enter image description here

我需要的是以任何方式使我的应用程序始终处于最佳状态。

我还在stackoverflow上搜索了许多其他相关帖子,但似乎没有人回答我的问题。我还尝试过其他方法,例如覆盖windowDeactivated(WindowEvent e)方法

addWindowListener(new WindowAdapter(){
    @Override
    public void windowDeactivated(WindowEvent e) {
        toFront();
        //requestFocus();
        //requestFocusInWindow();
    }
});

但这也行不通。

除了全屏应用程序外,还有其他方法可以使我的 JFrame始终位于其他所有应用程序之上

1 个答案:

答案 0 :(得分:1)

这取决于操作系统。一般情况下,您不能保证您的窗口在本机窗口时始终位于顶部,您也不应该。任务经理总是充满理由。

我记得有些版本的Vista和较旧的Windows系统允许这样做,原生和Java窗口最终争夺焦点。