日期:2014-05-20  浏览次数:20799 次

swing子界面关闭 父界面如何捕获?
如题 
子界面closed事件出发后 父界面如何知道?
------最佳解决方案--------------------

子界面如果是用 JDialog

有两种情况,第一种如果dialog是模态: 


dialog.setModal(true);
dialog.setVisible(true);
// ...


当运行到 dialog.setVisible(true); 的时候,当前线程会被挂起,直到dialog被关闭之后才会返回,继续执行下面的代码。

另外所有的 Window 的子类都可以 addWindowListener(),而WindowListener中有一个方法是

void windowClosed(WindowEvent e) 通过这个就可以知道dialog关闭


------其他解决方案--------------------
就这么多积分了 求指教
------其他解决方案--------------------
引用:
子界面如果是用 JDialog

有两种情况,第一种如果dialog是模态: 

Java code1234dialog.setModal(true);dialog.setVisible(true);// ...

当运行到 dialog.setVisible(true); 的时候,当前线程会被挂起,直到dialog被关闭之后才会返回,继续执行下面的代码。

另外所有的 Windo……


addWindowListener()是在子页面中可以监听到JDialog是否可以关闭 
但是我子页面关闭后 想让父页面直接捕获到  可以么?
除了数据库和文件操作之外   父页面(panel)可以捕获到子页面(JDialog)是否关闭?
------其他解决方案--------------------
引用:
引用:子界面如果是用 JDialog

有两种情况,第一种如果dialog是模态: 

Java code1234dialog.setModal(true);dialog.setVisible(true);// ...

当运行到 dialog.setVisible(true); 的时候,当前线程会被挂起,直到dialog被关……


addWindowListener()

WindowListener 可以写在任何地方,任何一个类只要 implements WindowListener 就可以加进去,你要在子对话框关闭的时候在父窗体运行任何逻辑,只要在父窗体的类中定义一个内部类,implements WindowListener,然后把它加进子对话框就行了:


  
  dialog.addWindowListener(new WindowAdapter() {
    
    @Override
    public void windowClosed(WindowEvent e) {
    
      // 这里调用你想要运行的逻辑
    }
  });




------其他解决方案--------------------
引用:
引用:引用:子界面如果是用 JDialog当运行到 dialog.setVisible(true); 的时候……


再请教一个问题 
为什么我子窗口每次关闭 
public void windowClosed(WindowEvent e) {} 都会执行3次?
有什么办法能让它只执行一次?
------其他解决方案--------------------
试试  void windowClosing(WindowEvent e)




import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;


/**
 *
 * @date   13/11/2012
 */
public class TestWindowListener implements WindowListener{
  
  public static void main(String[] args) {
    
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {
        
        JDialog d = new JDialog();
        d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);