当JFrame0被停用时,Java会隐藏JFrame1和JFrame2吗?

时间:2011-03-10 17:02:17

标签: java swing jframe

当用户点击“mainFrame”时,有没有办法隐藏我的应用程序的所有其他JFrame?

我试过这个

   public void windowActivated(WindowEvent we) {
        frame1.setVisible(true);
        frame.setVisible(true);
    }

    public void windowDeactivated(WindowEvent we) {
        frame1.setVisible(false);
        frame2.setVisible(false);
    }`

但这不起作用。我的所有Windows都开始闪烁。我不能将JFrame2设置为不可聚焦。

还有其他办法吗?

2 个答案:

答案 0 :(得分:2)

使用非模态对话框,默认情况下会对问题进行排序。

import javax.swing.*;

class TestDialogMinimize {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                JFrame f = new JFrame("Has a Dialog");

                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setSize(400,400);

                JDialog d = new JDialog(f);
                d.setSize(200,200);
                f.setVisible(true);
                d.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 1 :(得分:1)

this answer中的非模态对话建议是一种方法。另请参阅this answer elsewhere

如果由于某种原因你需要继续使用框架,你可以用

缩小它们
frame1.setState(Frame.ICONIFIED)

并用

提升它们
frame1.setState(Frame.NORMAL)

在代码块中处理这些:

frame0.addWindowStateListener(new WindowStateListener() {

        @Override
        public void windowStateChanged(WindowEvent e) {
                // handle change
        }
    });

this question's answers中所述。

如果要在关闭frame0时关闭所有帧,可以使用:

frame0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

退出程序并在关闭frame0时关闭所有帧。如果你只是隐藏在近距离使用窗口监听器。您可以在frame1.setVisible(false)中使用WindowListener