Java 管理JDialog关闭行为

Java 管理JDialog关闭行为,java,forms,swing,jdialog,Java,Forms,Swing,Jdialog,在显示实际应用程序之前,我使用JDialog窗口显示一个形式的“pinentry”窗口。因为我似乎无法隐藏关闭按钮,所以我试图控制单击此按钮时发生的情况。这样做的目的是使对话框再次自动打开(因此,除非输入正确的PIN码,否则无法访问其后面的表单),但WindowListener似乎不是正确的方法 pinDialog = new JDialog(); pinDialog.setSize(300, 208); pinDialog.setModalityType(Dialog.ModalityType

在显示实际应用程序之前,我使用JDialog窗口显示一个形式的“pinentry”窗口。因为我似乎无法隐藏关闭按钮,所以我试图控制单击此按钮时发生的情况。这样做的目的是使对话框再次自动打开(因此,除非输入正确的PIN码,否则无法访问其后面的表单),但WindowListener似乎不是正确的方法

pinDialog = new JDialog();
pinDialog.setSize(300, 208);
pinDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
pinDialog.setVisible(true);
pinDialog.addWindowListener(new WindowAdaptor(){
    public void windowClosed(WindowEvent e)
        {
            //things to open the dialog again here
        }
    });
这里的最后一条语句(addWindowListener)似乎不是WindowAdapter参数的正确类型,但是我已经看到许多使用这种方法的示例。问题是因为我使用的是JDialog而不是新的框架吗

但是WindowListener似乎不是正确的方法

pinDialog = new JDialog();
pinDialog.setSize(300, 208);
pinDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
pinDialog.setVisible(true);
pinDialog.addWindowListener(new WindowAdaptor(){
    public void windowClosed(WindowEvent e)
        {
            //things to open the dialog again here
        }
    });
您还需要使用:

 dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
当您创建对话框时。然后可以控制WindowListener中的行为

查看更多信息。这篇文章是针对框架的,但基础知识也适用于对话框

但是WindowListener似乎不是正确的方法

pinDialog = new JDialog();
pinDialog.setSize(300, 208);
pinDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
pinDialog.setVisible(true);
pinDialog.addWindowListener(new WindowAdaptor(){
    public void windowClosed(WindowEvent e)
        {
            //things to open the dialog again here
        }
    });
您还需要使用:

 dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
当您创建对话框时。然后可以控制WindowListener中的行为


查看更多信息。这篇文章是针对一个框架的,但基础知识也适用于对话框。

您可能需要覆盖
WindowAdapter
构造函数中的方法设置关闭操作??setDefaultCloseOperation()您可能需要覆盖
WindowAdapter
构造函数中的方法设置关闭操作??setDefaultCloseOperation()那么DefaultCloseOperation和WindowListener可以协同工作吗?因为我曾尝试单独使用前者,但没有任何效果。然而,IDE仍在抱怨“类型窗口中的addWindowListener不适用于参数new WindowAdapter”…@Wolfish-阅读JDialog API,您将看到可以将WindowListener添加到对话框中。我从不使用IDE生成代码。我不知道是什么问题。可能问题在于,您试图在对话框可见后将侦听器添加到对话框中。这是行不通的,因为只有在对话框关闭后才执行该语句,这违背了使用WindowListener的目的。我不确定当对话框可见时,WindowListener必须如何可用,因为我正在侦听对话框关闭…但我可以看到它肯定会工作。不过,我也看到了一个编译器错误,所以我会在您建议时尝试将其移动。那么DefaultCloseOperation和WindowListener是协同工作的吗?因为我曾尝试单独使用前者,但没有任何效果。然而,IDE仍在抱怨“类型窗口中的addWindowListener不适用于参数new WindowAdapter”…@Wolfish-阅读JDialog API,您将看到可以将WindowListener添加到对话框中。我从不使用IDE生成代码。我不知道是什么问题。可能问题在于,您试图在对话框可见后将侦听器添加到对话框中。这是行不通的,因为只有在对话框关闭后才执行该语句,这违背了使用WindowListener的目的。我不确定当对话框可见时,WindowListener必须如何可用,因为我正在侦听对话框关闭…但我可以看到它肯定会工作。不过,我也看到了一个编译器错误,所以我将尝试按照您的建议移动它