gpt4 book ai didi

java - 下次显示父对话框时处理 JDialog 的子 JDialog

转载 作者:行者123 更新时间:2023-11-30 10:47:17 27 4
gpt4 key购买 nike

我有一个从 JFrame 上的按钮打开的父 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 方法。

从现在开始,当您关闭 Parent 时,Child 的 visible 属性变为 false,直到我们再次单击 Parent 的按钮。

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

完整代码

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);
}
}
);
}
}

关于java - 下次显示父对话框时处理 JDialog 的子 JDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com