Bir Swing çerçevesini programlı olarak kapatmanın en iyi yolu, "X" düğmesine basıldığında olduğu gibi davranmasını sağlamaktır. Bunu yapmak için ihtiyaçlarınıza uyan WindowAdapter uygulamanız ve çerçevenin varsayılan kapatma işlemini hiçbir şey yapmadan ayarlamanız gerekir (DO_NOTHING_ON_CLOSE).
Çerçevenizi şu şekilde başlatın:
private WindowAdapter windowAdapter = null;
private void initFrame() {
this.windowAdapter = new WindowAdapter() {
// WINDOW_CLOSING event handler
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
// You can still stop closing if you want to
int res = JOptionPane.showConfirmDialog(ClosableFrame.this, "Are you sure you want to close?", "Close?", JOptionPane.YES_NO_OPTION);
if ( res == 0 ) {
// dispose method issues the WINDOW_CLOSED event
ClosableFrame.this.dispose();
}
}
// WINDOW_CLOSED event handler
@Override
public void windowClosed(WindowEvent e) {
super.windowClosed(e);
// Close application if you want to with System.exit(0)
// but don't forget to dispose of all resources
// like child frames, threads, ...
// System.exit(0);
}
};
// when you press "X" the WINDOW_CLOSING event is called but that is it
// nothing else happens
this.setDefaultCloseOperation(ClosableFrame.DO_NOTHING_ON_CLOSE);
// don't forget this
this.addWindowListener(this.windowAdapter);
}
Çerçeveyi aşağıdaki gibi WINDOW_CLOSING olayı göndererek programlı olarak kapatabilirsiniz:
WindowEvent closingEvent = new WindowEvent(targetFrame, WindowEvent.WINDOW_CLOSING);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(closingEvent);
Bu, "X" düğmesine basıldığı gibi çerçeveyi kapatacaktır.