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

最佳答案

JDialog确实是正确的选择。

要使其阻塞父窗口,您必须向Platos添加一个构造函数,该构造函数将在父框架中使用JDialog构造函数:

JDialog dlg = new JDialog(parentWindow, modality);


其中parentWindow通常是JFrame。

您可以这样操作:

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


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

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



有关更多参考,请参见docs

10-07 19:27
查看更多