模态对话框关闭窗口激活框架

时间:2012-10-02 12:29:21

标签: java swing dialog modal-dialog parent

是否可以在关闭文档模式JDialog时使Java Swing激活父JFrame?默认机制似乎激活了最后一个JFrame而不是父JFrame。这可能会使用户感到困惑。

以下是一些重现问题的示例代码:

1:按“步骤1:按此”按钮 2:按“步骤2:按此”按钮
3:将JFrame置于前面,标题为“步骤3:激活此” 4:关闭JDialog,标题为“步骤4:关闭此”

=>现在,带有文本“第1帧”的JFrame应该放在前面 =>相反,带有文本“步骤3:激活此”的JFrame会出现在前面。
=>对于用户来说,这是令人困惑的,因为关闭的JDialog是第1帧的文档模式

    public static void main(String[] args) {
    final JFrame f1 = new JFrame("frame 1");
    f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f1.setLayout(new FlowLayout());
    f1.add(new JButton(new AbstractAction("step 1: press this") {

        @Override
        public void actionPerformed(ActionEvent e) {
            JFrame f2 = new JFrame("step 3: activate this");
            f2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f2.setLayout(new FlowLayout());
            f2.add(new JLabel("step 3: activate this"));
            f2.pack();
            f2.setVisible(true);
        }
    }));
    f1.add(new JButton(new AbstractAction("step 2: press this") {

        @Override
        public void actionPerformed(ActionEvent e) {
            JDialog d = new JDialog(f1, "step 4: close this", ModalityType.DOCUMENT_MODAL);
            d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            d.setLayout(new FlowLayout());
            d.add(new JLabel("step 4: close this"));
            d.pack();
            d.setVisible(true);
        }
    }));
    f1.pack();
    f1.setVisible(true);
}

有什么想法吗? (我不想手动调用f1.toFront(),因为结果会导致窗口短暂“闪烁”)

祝你好运 烫发

0 个答案:

没有答案