我有一个JFrame,可以在按钮点击时启动对话框。我想要一个不同的按钮来启动2+对话框,这些对话框是父框架的模态(允许两个对话框的并排比较和交互,但不允许用户与父框架交互)。是否可以使用对话框执行此操作,还是应该使用框架?
答案 0 :(得分:1)
同样,您可以创建一个JDialog模式,并将其父窗口设置为主JFrame,并使第二个对话框无模式,并将其父窗口设置为第一个对话框。类似的东西:
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MultipleDialogs {
@SuppressWarnings("serial")
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
final JFrame mainFrame = new JFrame("Main JFrame");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setPreferredSize(new Dimension(400, 300));
JPanel panel = new JPanel();
panel.add(new JButton(new AbstractAction("Two Dialogs") {
@Override
public void actionPerformed(ActionEvent e) {
JDialog dialog1 = new JDialog(mainFrame, "Dialog 1 -- modal", ModalityType.APPLICATION_MODAL);
dialog1.setPreferredSize(new Dimension(200, 100));
dialog1.pack();
dialog1.setLocationByPlatform(true);
JDialog dialog2 = new JDialog(dialog1, "Dialog 2 -- nonmodal", ModalityType.MODELESS);
dialog2.setPreferredSize(new Dimension(200, 100));
dialog2.pack();
dialog2.setLocationByPlatform(true);
dialog2.setVisible(true);
dialog1.setVisible(true);
}
}));
mainFrame.add(panel);
mainFrame.pack();
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
});
}
}
确保在显示第一个对话框后将模态对话框设置为。
答案 1 :(得分:0)
我找到了我要找的东西。基本上我将对话框模态设置为false,并在启动时将父帧设置为禁用。然后我继续计算打开的对话框的数量,当所有对话框都关闭时,我重新启用它。