如果您有一个WindowListener,那么每当窗口关闭时,是否总是会发生windowDeactivated(WindowEvent)事件,或者是否可以在没有windowDeactivated(WindowEvent)的情况下发生windowClosing(WindowEvent)。也就是说,窗口停用是关闭窗口的一部分吗?
最后,windowClosed(WindowEvent)总是(通常)跟在windowClosing(WindowEvent)后面吗
发布于 2010-01-27 09:27:00
假设为JFrame,结果似乎依赖于setDefaultCloseOperation();获取WINDOW_CLOSED事件需要“在窗口上调用dispose”,例如通过DISPOSE_ON_CLOSE,正如前面提到的here。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
/** @see http://stackoverflow.com/questions/2141325 */
public class MyPanel extends JPanel {
private static final Random RND = new Random();
private static final WindowAdapter listener = new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
print(e);
}
@Override
public void windowClosing(WindowEvent e) {
print(e);
}
@Override
public void windowDeactivated(WindowEvent e) {
print(e);
}
private void print(WindowEvent e) {
System.out.println(e.getWindow().getName() + ":" + e);
}
};
public MyPanel() {
this.setBackground(new Color(RND.nextInt()));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
private static void create() {
for (int i = 0; i < 2; i++) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setTitle(String.valueOf(i));
f.add(new MyPanel());
f.addWindowListener(listener);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
create();
}
});
}
}https://stackoverflow.com/questions/2141325
复制相似问题