Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理JDialog';下一次显示父对话框时,单击子JDialog_Java_User Interface - Fatal编程技术网

Java 处理JDialog';下一次显示父对话框时,单击子JDialog

Java 处理JDialog';下一次显示父对话框时,单击子JDialog,java,user-interface,Java,User Interface,我从JFrame上的按钮打开了一个父JDialog。父JDialog本身有一个子JDialog,该子JDialog通过父对话框上的按钮打开。当我关闭父对话框并使用框架上的按钮再次打开它时,我不希望子对话框也打开 有没有办法阻止子对话框打开,除非用户明确按下父对话框上的按钮 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

我从JFrame上的按钮打开了一个父JDialog。父JDialog本身有一个子JDialog,该子JDialog通过父对话框上的按钮打开。当我关闭父对话框并使用框架上的按钮再次打开它时,我不希望子对话框也打开

有没有办法阻止子对话框打开,除非用户明确按下父对话框上的按钮

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MultiDialog {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(
            new Runnable() {
                public void run() {
                    final JDialog d1 = new JDialog();
                    final JDialog d2 = new JDialog(d1);
                    d1.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
                    d2.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);

                    d1.setSize(new Dimension(150, 100));
                    d1.setTitle("Parent");
                    d1.setLocation(50, 50);

                    d2.setTitle("Child");
                    d2.setSize(new Dimension(100, 100));
                    d2.setLocation(150, 150);

                    JFrame f = new JFrame("App");
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    JButton b1 = new JButton("Show Parent Dialog");
                    f.add(b1);
                    b1.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            d1.setVisible(true);
                        }
                    });

                    JButton b2 = new JButton("Show Child Dialog");
                    d1.add(b2);
                    b2.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            d2.setVisible(true);
                        }
                    });

                    f.pack();
                    f.setVisible(true);
                }
            }
        );
    }
}

WindowListener
添加到父级
JDialog
中,并使用
windowClosing
方法将其覆盖

从现在起,当您关闭父对象时,子对象的
可见属性将变为false,直到我们再次单击父对象的按钮

d1.addWindowListener(new WindowAdapter(){
    @Override
    public void windowClosing(WindowEvent arg0) {
        d2.setVisible(false);
    };
});

完整代码
当父对话框关闭时,不能关闭子对话框吗
addWindowsStateListener()
应该可以做到这一点。
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MultiDialog {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(
                new Runnable() {
                    public void run() {
                        final JDialog d1 = new JDialog();
                        final JDialog d2 = new JDialog(d1);
                        d1.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
                        d2.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);

                        d1.setSize(new Dimension(150, 100));
                        d1.setTitle("Parent");
                        d1.setLocation(50, 50);

                        d2.setTitle("Child");
                        d2.setSize(new Dimension(100, 100));
                        d2.setLocation(150, 150);

                        JFrame f = new JFrame("App");
                        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        JButton b1 = new JButton("Show Parent Dialog");
                        f.add(b1);
                        b1.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                d1.setVisible(true);
                            }
                        });

                        d1.addWindowListener(new WindowAdapter(){
                            @Override
                            public void windowClosing(WindowEvent arg0) {
                                d2.setVisible(false);
                            };
                        });

                        JButton b2 = new JButton("Show Child Dialog");
                        d1.add(b2);
                        b2.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                d2.setVisible(true);
                            }
                        });

                        f.pack();
                        f.setVisible(true);
                    }
                }
                );
    }
}