这里打开JDialog的Java代码:

public class AccountsInternalFrame extends JInternalFrame implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == applyFilterButton) {
        } else if (e.getSource() == cleanFilterButton) {
        } else if (e.getSource() == paymentAccountButton) {
        EditPaymentAccountDialog editPaymentAccountDialog = new EditPaymentAccountDialog(owner);
        editPaymentAccountDialog.setVisible(true);
        }
    }
}


这是我的对话代码:

    public class EditPaymentAccountDialog extends JDialog implements ActionListener {
        public EditPaymentAccountDialog(Frame owner) {
            super(owner, true);
            initialize();
        }



private void initialize() {
               buildGUI();
               initLogic();

               setPreferredSize(new Dimension(680, 280));
                pack();
                setLocationRelativeTo(null); // center
                setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        }

    private void buildGUI() {
        setTitle(SystemOptions.translate("edit.payment.account"));
        Component mainPanel = createMainPanel();
        add(mainPanel);
    }
}


因此,我的dilog成功展示了。
但是,当我单击X(右上角)时,对话框成功隐藏,但再次显示。在我再次单击X之后,对话框将永远隐藏。

为什么我需要两次单击X才能隐藏对话框?

最佳答案

您的对话框是模式对话框。因此,它的setVisible(true)方法将阻塞,直到将其关闭。然后您指定在调用setVisible(true)之后关闭时应该发生的情况:

setVisible(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);


顺便说一句,这也阻止了您的initLogic()代码被执行。

不要使对话框在构造函数中可见。让您使用对话框选择何时使其可见。构造对话框应该构造它。使其不可见,并阻止调用代码。

09-30 17:13