자바의 GUI Swing 의 튜토리얼이다. AWT GUI 이후 오늘날까지 사용되고 있는 Java의 GUI 프레임웤이다. AWT가 먼저나왔으니까 AWT GUI를 먼저 해보던 상관은 없다. Swing 이 훨씬 쓸만하도록 설계되어 있다.
물론 Swing도 나온지 오래되었지만 20년째 딱히 바뀌지 않는 윈도우 애플리케이션들을 보면 기본틀은 안정화 되었다.
Swing 이전의 AWT에 대하여 궁금하면 아래 링크를 참조한다.
JFrame으로 윈도우창을 띄어보는 것부터 시작할 것이다. Swing은 자바의 JDK에 기본적으로 포함되어 있다. java.awt.Frame 를 상속하는데 awt의 Frame과는 약간의 호환성이 떨어진다. add ( ) , remove ( ) 등의 메소드들이 오버라이드 되었다.
컴포넌트 메소드 중에 자주 쓰이는 메소드는 add, setSize, setLayout,setVisible 등이 있다. 컴포넌트의 특성을 생각하면 많은 특성들이 공유될 것을 예상할 수 있다.
Swing을 이야기 할때 보통 AWT에 대한 비교를 많이한다. 자바 GUI의 구버전이기 때문에 그런 부분도 없지 않다. 같은 계열에서 비교해야지 좀더 차이가 난다. Swing의 기본적인 특성을 보면,
- 컴포넌트들은 플랫폼 독립적이다. OS마다 들쭉날쭉 하지 않다는 말이다.
- 컴포넌트가 AWT에 비하여 가벼워졌다. AWT는 OS(시스템콜)를 자주 호출하지만 SWING에서는 그럴 필요가 없다.
- pluggable look and feel 이 가능하다. 실행시간에 프로그래머가 커스터마이즈 세팅으로 외관을 바꿀 수 있다.
- 유용한 컴포넌트가 더 늘어났다.
- MVC 모델을 지원한다. (Model View Controller)
*JFrame의 javadoc은 아래와 같다.
JFrame을 만드는 방법은 여러가지가 있다. 이 포스트는 두개를 설명한다.
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwingEX1 {
public static void main(String[] args) {
JFrame f1 =new JFrame();
JButton b1 = new JButton("CLICK");
b1.setBounds(100, 100, 100, 40);
f1.add(b1);
f1.setSize(300,400);
f1.setLayout(null);
f1.setVisible(true);
}
}
버튼이 하나 달려있는 프레임(윈도우)이다. 실행하면
깔끔한 윈도우창이 열린다. 가운데는 버튼이다. 버튼은 컴포넌트의 하위클래스다.
import 문에서 javax.swing. 패키지에서 JFrame과 JButton을 가져온다. javax.swing.* 이렇게 패키지에서 모두 가져올 수도 있다.
먼저 JFrame 의 인스턴스를 생성한다. JButton 으로 가운데의 CLICK 버튼의 인스턴스를 생성하고 위치와 크기를 잡아준다. setBounds 에 상대위치 (좌측 상단에서 버튼까지의 거리)와 절대크기(버튼의 크기, 가로 x 세로)를 픽셀로 지정해준다. JFrame 의 인스턴스로 add(버튼의 인스턴스) 하고 나머지 설정 setSize - 윈도우의 사이즈 setLayout 레이아웃 관리자 없으면 null 이다. 마지막으로 setVisible(true)면 창을 그린다.
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwingEX2 extends JFrame{
SwingEX2(){
JButton b1 = new JButton("CLICK");
b1.setBounds(100, 100, 100, 40);
add(b1);
setSize(300,400);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
new SwingEX2();
}
}
JFrame을 상속해서 사용하는 방법도 있다.
JFrame을 만드는 내용으로 생성자에 코드를 작성한다. 버튼은 외부클래스를 불러오는 것이니까 똑같다. JFrame 을 상속했으므로 SwingEX2도 JFrame 자료형이니 참조변수를 따로 생성할 필요는 없다. import 되었으니까 생성할 수도 있으나 이쪽이 편하다. main 메서드에서 SwingEX2를 생성하면 창이 나타난다.
다음 포스트부터 Swing의 다양한 컴포넌트들을 사용해 보겠다.