Swing中setDefaultCloseOperation无效

4

当在swing窗口上单击红色x标记时,我需要停止默认的窗口关闭操作。我正在使用JDialog,并向其添加WindowsListener以捕获WindowClosing事件,在那里我决定是否释放JDialog或不释放它,我还设置了以下内容:

setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

但是当我点击红色的X标记时,窗口仍然关闭。有什么想法吗?

1
你能贴一些你的代码来检查吗? - dexametason
3
doNothingOnClose总是有效-现在是展示一个SSCCE的时候了。 (注:SSCCE指的是Small, Self-Contained, Correct Example,即小型、自包含、正确的示例代码) - kleopatra
希望这个示例能对您有所帮助 :-) - nIcE cOw
2个回答

0
将 Window 监听器添加到 JDialog 中使我能够处理窗口操作,并且在我的应用程序中运行良好。

这个答案非常模糊:毫无疑问它是可以完成的,但是原帖中想知道如何准确设置对话框以及侦听器中需要做什么。 - kleopatra

0
你可以尝试创建一个 WindowListener,当关闭按钮被点击时什么也不做。
jdialog.addWindowListener(new WindowAdapter() 
{
  public void windowClosed(WindowEvent e)
  {   
  }

  public void windowClosing(WindowEvent e)
  {
  }

});

是的,我正在这样做,但默认情况下窗口关闭的行为仍然发生。为了覆盖默认行为,我们需要执行setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);,我已经这样做了,但它仍然关闭。 - Gaurav
您提到的函数在jFrame上将完美运行。我不确定它是否适用于jDialog。请检查一下。 - ganesshkumar
1
-1 添加一个无操作的监听器确实完全没有任何效果(对话框或框架都无关紧要) - kleopatra
@Kleopatra 这没有任何影响。同时它也不会关闭窗口。 - ganesshkumar
默认情况下,该框架/对话框已关闭 :-) - kleopatra
@kleopatra,它确实起了作用,我只需要添加一个空的窗口监听器,不知怎么地就可以了。addWindowListener(new WindowAdapter(){}); - José Roberto Araújo Júnior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接