자바의 GUI Swing 의 튜토리얼이다. AWT GUI 이후 오늘날까지 사용되고 있는 Java의 GUI 프레임웤이다. AWT가 먼저나왔으니까 AWT GUI를 먼저 해보던 상관은 없다. Swing 이 훨씬 쓸만하도록 설계되어 있다.
물론 Swing도 나온지 오래되었지만 20년째 딱히 바뀌지 않는 윈도우 애플리케이션들을 보면 기본틀은 안정화 되었다.
Swing 이전의 AWT에 대하여 궁금하면 아래 링크를 참조한다.
자바 튜토리얼 (7-1) AWT GUI 윈도우 창 만들기
AWT는 자바 GUI의 시조새입니다. GUI에 대하여 쓴 포스팅을 분리했습니다. GUI 개념 설명입니다. https://digiconfactory.tistory.com/56 인터페이스는 무엇인가? GUI와 CUI와 UX와 UI *자바의 AWT관련 포스팅을..
digiconfactory.tistory.com
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 (Java Platform SE 8 )
An extended version of java.awt.Frame that adds support for the JFC/Swing component architecture. You can find task-oriented documentation about using JFrame in The Java Tutorial, in the section How to Make Frames. The JFrame class is slightly incompatible
docs.oracle.com
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의 다양한 컴포넌트들을 사용해 보겠다.