使用JDialog.toBack()进行奇怪的焦点行为

时间:2014-06-24 13:30:39

标签: java swing focus jdialog

我在JDialog窗口中有一个主框架和一种工具栏。我想要那个"工具栏"总是在我的程序之上,所以我写了这段代码:

public class Test {
    private static JFrame mainFrame;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                mainFrame = new JFrame("test");
                mainFrame.setSize(800,600);
                mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                mainFrame.setVisible(true);

                MyDialog d = new MyDialog();
            }
        });
    }

    public static class MyDialog extends JDialog {

        public MyDialog() {
            super(mainFrame);
            setAlwaysOnTop(true);
            setSize(80,60);
            setVisible(true);

            mainFrame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowActivated(WindowEvent e) {MyDialog.this.setAlwaysOnTop(true);}
                @Override
                public void windowDeactivated(WindowEvent e) {
                    MyDialog.this.toBack();
                }
            });
        }
    }
}

总结一下,我创建了一个mainFrame,然后是mainFrame拥有的JDialog。 JDialog将监听mainFrame。当mainFrame被取消激活时,对话框被设置为" toBack"。激活后,它将被设置为" alwaysOnTop"。

一切听起来不错,只是当我尝试从我的程序切换到另一个程序时,焦点似乎从MyApp到Firefox(例如),然后从Firefox到JDialog。我怎么能避免这种情况?

0 个答案:

没有答案