0

我有一个带有打开新窗口的按钮的 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);
        }
    }    
}
4

1 回答 1

3

JDialog 确实是正确的选择。

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

JDialog dlg = new JDialog(parentWindow, modality);

parentWindowJFrame 通常在哪里。

你这样做:

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

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

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


如需更多参考,请参阅文档

于 2013-08-06T14:29:20.580 回答