当前位置:  开发笔记 > 编程语言 > 正文

如何关闭JDialog并通知Window事件监听器?

如何解决《如何关闭JDialog并通知Window事件监听器?》经验,为你挑选了1个好方法。

有没有办法通过代码关闭JDialog,以便仍然会通知Window事件监听器?我试过将可见设置为假和处理,但似乎都没有.



1> David Moles..:

关闭一个窗口(with dispose())并将其隐藏(with setVisible(false))是不同的操作,并产生不同的事件 - 从操作系统关闭它是另一个产生不同事件的不同操作.

所有这三个都会产生windowDeactivated告诉你窗口失去焦点,但dispose()随后会产生windowClosed,而从操作系统关闭将首先产生windowClosing.如果要以相同的方式处理这两种方法,可以将窗口设置为在关闭时处理:

window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

通常,setVisible(false)暗示您可能希望再次使用该窗口,因此它不会发布任何窗口事件(除此之外windowDeactivated).如果要检测窗口的隐藏,则需要使用ComponentListener;

window.addComponentListener(new ComponentAdapter() {
  @Override
  public void componentHidden(ComponentEvent e) {
    System.out.println("componentHidden()");
  }
})

请注意,这几乎只适用于显式setVisible()调用.如果你需要更普遍地检测隐藏,你可以使用a HierarchyListener,但它可能比它的价值更麻烦.

  window.addHierarchyListener(new HierarchyListener() {
    @Override
      public void hierarchyChanged(HierarchyEvent e) {
        System.out.println("valid: " + window.isValid());
        System.out.println("showing: " + window.isShowing());
      }
  });

请注意,当你处理一个窗口时,你会得到几个HierarchyEvents,首先是隐藏然后是为了失效,但是当你隐藏它时setVisible()它仍然有效,所以你不会得到失效.


谢谢大卫.我只是在使用dispose时正在监听windowClosing.我没有意识到只有操作系统关闭它产生窗口关闭.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有