Swing 을 사용하는 Jogl 코드의 해설
Swing 을 사용하는 Jogl 코드의 해설
Swing 을 사용하는 Jogl 코드라고는 하지만 Swing 과 Jogl 의 통합이 아니라 Swing(lightweight component) 와 Awt(heavyweight component)의 통합이라는 표현이 합당할 것이다. Awt 는 스크린에 직접 접근할 수 있으나 Swing 은 오직 상위계층인 awt 의 네이트브 리소스를 통해서만 스크린에 접근할 수 있다. 이런 연유로 Awt 는 중량급 컴포넌트, Swing 은 스크린의 네이티브 리소스를 거니리지 않는 경량급 컴포넌트라 부른다. 어것은 아래의 클래스 계층구조를 보면 잘 알 수 있다.
javax.swing |
위에서 보듯이 JFrame은 awt의 Frame의 하위 클래스로 Frame과 그 상위 awt 컴포넌트의 메쏘드를 빌려 네이티브 스크린 리소스에 접근하는 구조를 갖고 있다.
awt 와 Swing 의 다른점은
첫째는 awt의 Frame을 썼을 때에 사용한
JoglFrame frame = new JoglFrame ();
frame.setVisible(true);
에 해당하는 부분이
final JoglJFrame app = new JoglJFrame();
SwingUtilities.invokeLater (new Runnable() {public void run() {app.setVisible(true);}});
로서 window 가 update 될 때에도 다시 보이도록 한다.
둘째는 awt의 Frame을 썼을 때에 사용한
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (anim != null) anim.stop();
System.exit(0);
}
에 24째 줄의
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
로 바꿔 주는 것이다.
나머지 것은 거의 awt 의 컴포넌트를 쓰는 방식과 대동 소이함으로 생략한다.
경량급 컴포넌트(Swing)와 중량급 컴포넌트(Awt) 섞어쓰기에 관해서는
http://java.sun.com/products/jfc/tsc/articles/mixing/
를 참조하고
JFrame의 구조에 대해서는 아래의 참고 문헌
http://www.cc.gatech.edu/classes/cs4812_99_winter/swing/sld014.htm
을 참조하기 바란다.