Java 处理JDialog';下一次显示父对话框时,单击子JDialog
我从JFrame上的按钮打开了一个父JDialog。父JDialog本身有一个子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;
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);
}
}
);
}
}