AWT 프레임워크에 컴포넌트를 달아 보겠습니다.
이제 좀 소스코드가 길어졌습니다. import로 awt 패키지에서 클래스들을 가져옵니다.
import java.awt.*;
import java.awt.event.*
러 한번에 다 가져올 수 도 있지만 여기서는 사용하는 클래스만 import 합니다.
(간결한 설명을 위해 평어체를 사용합니다)
import java.awt.Frame;
import java.awt.Button;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class AwtGUI extends Frame {
AwtGUI(){
Button bt1 = new Button("클릭 버튼"); // VM argument -Dfile.encoding=MS949
bt1.setBounds(100,100,100,30);
Label lb1 =new Label("레이블1");
lb1.setBounds(100, 150, 100, 30);
TextField tf1 = new TextField("텍스트 필드 사용가능");
tf1.setBounds(100, 200, 150, 20);
TextArea ta1 = new TextArea("텍스트 에리어 사용가능");
ta1.setBounds(100, 250, 300, 300);
add(bt1);
add(lb1);
add(tf1);
add(ta1);
setTitle("프레임 예제");
setSize(700,700);
setLayout(null); //currently no layout
setBackground(Color.LIGHT_GRAY);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
}
public static void main(String[] args) {
AwtGUI ag1 = new AwtGUI();
System.out.println("Good to go,ma'am");
}
}
Frame 클래스를 상속하고 시작한다. (extends Frame) 이 코드는 생성자에서 컴포넌트의 인스턴스를 생성한다. Button,Label,TextField, TextArea 네개의 컴포넌트를 생성하고 Frame 에 추가한다. add( )
컴포넌트의 생성자는 문자열을 매개변수로 받는다. 문자열은 그 컴포넌트에 표시되는 문자들을 설정한다. setBounds 메서드는 Frame 내에서의 위치와 크기를 결정한다.
setBounds 의 매개변수는 다 같은 형식임을 알 수 있다. 좌측 상단 꼭대기 점을 기준으로 position 과 size가 결정된다.
위치의 설정이 끝나면 add( 컴포넌트의 인스턴스 ) 메서드로 Frame 에 달아준다. 보이지 않지만 add는 Container의 메서드이다. Frame 은 Container 로 부터 상속 받았다.
*컨테이너 javadoc
https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#add-java.awt.Component-
컴포넌트 4개에 각각 기본 문자열과 위치와 크기를 설정해준 후 add 로 Frame 에 넣어줬다. 그 다음 setTitle, setSize, setLayout 을 설정한 후 setVisible(true)로 Frame을 그려준다. setBackground는 배경색을 설정한다. setLayout 은 null로 해준다. 이 코드에서는 Layout 을 설정 안하고 직접 좌표로 설정을 해준다. 기본적인 AWT창을 만드는 법은 아래 포스트를 참고한다.
https://digiconfactory.tistory.com/57
생성자의 끝에 addWindowListner 는 우측 상단 x 아이콘을 클릭했을시의 종료 코드이다. AWT 이벤트 관련한 내용은 다른 포스트에서 다룰 것이다.
이제 main 메서드로 가보자. 생성자에 잔뜩 써놨지만 여기서부터 프로그램이 순차적으로 실행된다. 윈도우가 실행되도 다음 줄의 콘솔이 출력되는 것을 볼 수 있다. 윈도우가 쓰레드로 돌아가기 때문이다.
여러개의 윈도우창을 만들어도 동시에 실행되는 것 처럼 보인다. 종료시에는 X 버튼을 눌르면 정상적으로 종료된다. 클릭버튼, 레이블, 텍스트필드, 텍스트에리어 한번 쯤은 사용해본 기본 컴포넌트들이다. 생긴 모양이 다르고 이름을 다르게 부르는 것은 다 이유가 있다. 컴포넌트 들이 공통으로 적용되는 기능도 있고 다른 기능도 있다.
- Button : 버튼은 클릭하는 것이다.
- Label : 레이블은 문자를 표시한다.
- TextField : 텍스트필드는 문자를 입력한다.
- TextArea : 텍스트에리어는 문자들을 많이 쓸 때 필요하다.
메서드의 차이가 날 것이라고 예상할 수 있다. 필요할 때 마다 구글에서 javadoc을 검색하며 사용하는 습관을 기르면 모르는 클래스가 나와도 막막하지 않을 것이다. 각 컴포넌트 들이 다 클래스로 구현되어 있다는 것도 잘 들여다 보면, OOP를 공부하는데 도움이 될 것이다.