swing子界面关闭 父界面如何捕获? 如题 子界面closed事件出发后 父界面如何知道? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 子界面如果是用 JDialog有两种情况,第一种如果dialog是模态: dialog.setModal(true);dialog.setVisible(true);// ...当运行到 dialog.setVisible(true); 的时候,当前线程会被挂起,直到dialog被关闭之后才会返回,继续执行下面的代码。另外所有的 Window 的子类都可以 addWindowListener(),而WindowListener中有一个方法是void windowClosed(WindowEvent e) 通过这个就可以知道dialog关闭 addWindowListener()是在子页面中可以监听到JDialog是否可以关闭 但是我子页面关闭后 想让父页面直接捕获到 可以么?除了数据库和文件操作之外 父页面(panel)可以捕获到子页面(JDialog)是否关闭? addWindowListener()WindowListener 可以写在任何地方,任何一个类只要 implements WindowListener 就可以加进去,你要在子对话框关闭的时候在父窗体运行任何逻辑,只要在父窗体的类中定义一个内部类,implements WindowListener,然后把它加进子对话框就行了: dialog.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { // 这里调用你想要运行的逻辑 } }); 再请教一个问题 为什么我子窗口每次关闭 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); d.setSize(800, 500); d.setLocationRelativeTo(null); d.addWindowListener(new TestWindowListener()); d.setVisible(true); } }); } @Override public void windowOpened(WindowEvent e) { System.out.println("windowOpened " + e); } @Override public void windowClosing(WindowEvent e) { System.out.println("windowClosing " + e); } @Override public void windowClosed(WindowEvent e) { System.out.println("windowClosed " + e); } @Override public void windowIconified(WindowEvent e) { System.out.println("windowIconified " + e); } @Override public void windowDeiconified(WindowEvent e) { System.out.println("windowDeiconified " + e); } @Override public void windowActivated(WindowEvent e) { System.out.println("windowActivated " + e); } @Override public void windowDeactivated(WindowEvent e) { System.out.println("windowDeactivated " + e); }}---run:windowActivated java.awt.event.WindowEvent[WINDOW_ACTIVATED,opposite=null,oldState=0,newState=0] on dialog0windowOpened java.awt.event.WindowEvent[WINDOW_OPENED,opposite=null,oldState=0,newState=0] on dialog0windowClosing java.awt.event.WindowEvent[WINDOW_CLOSING,opposite=null,oldState=0,newState=0] on dialog0windowDeactivated java.awt.event.WindowEvent[WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0] on dialog0windowClosed java.awt.event.WindowEvent[WINDOW_CLOSED,opposite=null,oldState=0,newState=0] on dialog0windowClosed java.awt.event.WindowEvent[WINDOW_CLOSED,opposite=null,oldState=0,newState=0] on dialog0BUILD SUCCESSFUL (total time: 3 seconds) jTabbedPane重复打开的问题 正则表达式 K-Means算法的java实现 sun.io.MalformedInputException 的问题 求一个java字符串函数 关于在java网络编程中如何获取网页的图片信息的编程 ,帮帮忙 很急!!! 如何将JAVA程序编译成可直接使用形式,像exe等直接运行的 征求jRedioButton的简单使用方法 如何读写windows的 注册表? 初学者求助scala的一段代码,语法太难搞了 关于接口问题 JRE的应用
子界面如果是用 JDialog有两种情况,第一种如果dialog是模态:
dialog.setModal(true);
dialog.setVisible(true);
// ...
当运行到 dialog.setVisible(true); 的时候,当前线程会被挂起,直到dialog被关闭之后才会返回,继续执行下面的代码。另外所有的 Window 的子类都可以 addWindowListener(),而WindowListener中有一个方法是void windowClosed(WindowEvent e) 通过这个就可以知道dialog关闭
addWindowListener()是在子页面中可以监听到JDialog是否可以关闭
但是我子页面关闭后 想让父页面直接捕获到 可以么?
除了数据库和文件操作之外 父页面(panel)可以捕获到子页面(JDialog)是否关闭?
addWindowListener()WindowListener 可以写在任何地方,任何一个类只要 implements WindowListener 就可以加进去,你要在子对话框关闭的时候在父窗体运行任何逻辑,只要在父窗体的类中定义一个内部类,implements WindowListener,然后把它加进子对话框就行了:
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
// 这里调用你想要运行的逻辑
}
});
再请教一个问题
为什么我子窗口每次关闭
public void windowClosed(WindowEvent e) {} 都会执行3次?
有什么办法能让它只执行一次?
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);
d.setSize(800, 500);
d.setLocationRelativeTo(null);
d.addWindowListener(new TestWindowListener());
d.setVisible(true);
}
});
} @Override
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened " + e);
} @Override
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing " + e);
} @Override
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed " + e);
} @Override
public void windowIconified(WindowEvent e) {
System.out.println("windowIconified " + e);
} @Override
public void windowDeiconified(WindowEvent e) {
System.out.println("windowDeiconified " + e);
} @Override
public void windowActivated(WindowEvent e) {
System.out.println("windowActivated " + e);
} @Override
public void windowDeactivated(WindowEvent e) {
System.out.println("windowDeactivated " + e);
}
}---run:
windowActivated java.awt.event.WindowEvent[WINDOW_ACTIVATED,opposite=null,oldState=0,newState=0] on dialog0
windowOpened java.awt.event.WindowEvent[WINDOW_OPENED,opposite=null,oldState=0,newState=0] on dialog0
windowClosing java.awt.event.WindowEvent[WINDOW_CLOSING,opposite=null,oldState=0,newState=0] on dialog0
windowDeactivated java.awt.event.WindowEvent[WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0] on dialog0
windowClosed java.awt.event.WindowEvent[WINDOW_CLOSED,opposite=null,oldState=0,newState=0] on dialog0
windowClosed java.awt.event.WindowEvent[WINDOW_CLOSED,opposite=null,oldState=0,newState=0] on dialog0
BUILD SUCCESSFUL (total time: 3 seconds)