当我打开另一个时,阻止JDialog

时间:2013-08-06 14:21:13

标签: java swing block jdialog

我有一个带有按钮的JDialog,可以打开一个新窗口。我想要做的是每当其他窗口打开时阻止这个JDialog。当我说阻止时,我的意思是用户无法操纵它,不能移动它或最大化或任何东西。

顺便说一句,是否建议将JDialog用于带按钮和表格的窗口?当我必须使用哪个框架时,我仍然没有得到它!

这就是我所拥有的:

public class Platos extends JDialog {

    private final JPanel contentPanel = new JPanel();

    public static void main(String[] args) {
        try {
            Platos dialog = new Platos();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    

    public Platos() {
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setLayout(new FlowLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        {
            JButton btnAgregarPlato = new JButton("Agregar Plato");
            btnAgregarPlato.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                AgregarPlato ap = new AgregarPlato();
                ap.setVisible(true);
                }
            });
            btnAgregarPlato.setFont(new Font("Tahoma", Font.PLAIN, 11));
            contentPanel.add(btnAgregarPlato);
        }
    }    
}

1 个答案:

答案 0 :(得分:3)

JDialog确实是正确的选择。

要阻止父窗口,你必须向Platos添加一个构造函数,它将使用带有 parent 框架的JDialog构造函数:

JDialog dlg = new JDialog(parentWindow, modality);

parentWindow通常是JFrame。

你这样做:

public Platos(JFrame parent) {
    super(parent, ModalityType.APPLICATION_MODAL);
    ....

诀窍是ModalityType.APPLICATION_MODAL参数,它使对话框阻止所有其他对话框成为主框架。

您可以将主窗口作为父级传递,即使您从另一个窗口打开对话框也可以正常工作 - 最后一个阻止所有以前的对话框。


有关详细信息,请参阅docs