I have a problem why the windowClosed method does not run in my test code, as shown below:
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class Tmp { class TFrame extends JFrame{ private static final long serialVersionUID = -5729542298504858399L; public TFrame() { setTitle("title"); setSize(300, 300); } } public static void main(String[] args) { final TFrame t = new Tmp().new TFrame(); t.addWindowStateListener(new WindowAdapter() { @Override public void windowStateChanged(WindowEvent e) { super.windowStateChanged(e); System.out.println(e.getOldState() + "<-old new->" + e.getNewState()); } }); t.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { super.windowClosed(e); System.out.println(e.getID() + "closed " + e.getNewState()); } @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); System.out.println(e.getID() + "closing" + e.getNewState()); } }); t.setVisible(true); } }
If I write the setDefaultCloseOperation statement (JFrame.DISPOSE_ON_CLOSE) or explicitly call dispose () on the TFrame, windowClosed () will be called.
Can anyone explain this in more detail, I am confused about what is a way to record listeners for windowClosed (), thanks in advance.
////////////////// updated in accordance with some Dan manuals //////////////
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Tmp { class TFrame extends JFrame {
source share