프로그램 종료를 위해 간혹 사용되는 방법 중 하나가 윈도우 이벤트를 기반으로 windowClosing 메소드 내에 다음 문장을 삽입하는 것이다.
System.exit(0)
그런데 이 방법은 하나의 창에 있는 X 버튼만 눌러도 프로그램 전체가 종료되고만다. 즉 X 버튼이 눌리지 않는 GUI창도 함께 소멸되는 것이다. 프로그램 종료를 위해, 윈도우 이벤트 처리를 직접 하지 않고 JFrame에 정의되어 있는 다음 메소드를 호출하는 방법도 있다.
public void setDefaultCloseOperation(int operation)
이 메소드는 X 버튼이 눌렸을 떄의 실행 방식을 결정짓는 메소드이다. 이 메소드의 인자로 전달될 수 있는 값의 종류는 총 네가지인데, 이중에서 두가지 정도만 소개한다.
* WindowConstants.DISPOSE_ON_CLOSE dispose 메소드 호출과 동일한 효과
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; class JFrameWindowClosingEventHandler extends WindowAdapter { public void windowClosing(WindowEvent e) { JFrame frame = (JFrame)e.getWindow(); frame.dispose(); System.out.println("windowClosing()"); } } class JFrameWindow extends JFrame { JFrameWindow(String title) { super(title); this.setSize(300, 200); this.setVisible(true); this.addWindowListener(new JFrameWindowClosingEventHandler()); } } public class JFrameWindowEventTest { public static void main(String[] args) { JFrameWindow frameWindow = new JFrameWindow("Window"); } }
* JFrame.EXIT_ON_CLOSE System.exit 메소드 호출과 동일한 효과
addWindowListener { new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } }