AWT(Abstract Window Toolkit)는 GUI 프로그램을 제작하기 위해
자바에서 제공하는 라이브러리를 모아놓은 것이다.
운영체제가 제공하는 UI를 사용하기 때문에 플랫폼에 의존적이고
구성요소가 무겁다는 특징 때문에 요즘은 거의 사용하지 않는다고 한다.
하지만 비교적 쉽고, Java Swing이 AWT 기반이기 때문에
간단하게 한번 살펴보는 것도 좋을 듯하다.
AWT 계층 및 구성요소
1. Container
프로그램창의 역할을 한다. 이 컨테이너 위에 컴포넌트들이 올라간다.
2. Component
화면을 담당하는 구성요소들이다. ( 버튼, 텍스트 필드 등 )
3. Event
윈도우 프로그래밍에서 어떤 특정한 행동이 발생 한 그 자체를 의미한다. (ex 버튼 클릭 등)
- 이벤트 소스 : 이벤트가 발생된 컴포넌트를 말한다. ( 버튼, 체크박스 등 )
- 이벤트 리스너 : 이벤트가 발생하는지 검사하고 있다가 발생이 되면 이벤트를 처리할 수 있도록 만든 인터페이스 + 이벤트 어뎁터를 사용하면 불필요한 기능을 오버라이딩 하지 않아도 된다.
- 이벤트 핸들러 : 실제적으로 처리해주는 기능
Event 문법은 안드로이드를 개발할 때 많이 사용된다고 한다. 또한, 자바스크립트에서도 비슷한 방식으로 사용하기도 하니 잘 숙지하자.
주요 메서드
너무 많기 때문에 공식 문서를 찾아보도록 하자.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/java/awt/package-summary.html
java.awt (Java SE 17 & JDK 17)
package java.awt Contains all of the classes for creating user interfaces and for painting graphics and images. A user interface object such as a button or a scrollbar is called, in AWT terminology, a component. The Component class is the root of all AWT c
docs.oracle.com
기본 사용법
일단 프레임과 패널을 생성한다.
그 다음 패널에 버튼, 텍스트 필드 등의 컴포넌트를 추가하고
이 패널을 프레임에 추가하는 형식이다.
import java.awt.*;
public class Day1 {
public static void main(String[] args) {
Frame f = new Frame();
Panel p = new Panel(); //패널생성
Button b1 = new Button("Button 1"); //버튼생성
Button b2 = new Button("Button 2");
Button b3 = new Button("Button 3");
p.add(b1); //패널에 버튼붙이기
p.add(b2);
p.add(b3);
//text 필드
TextField tf1 = new TextField("아이디 입력",12); //텍스트필드생성
TextField tf2 = new TextField("암호 입력",10);
tf1.selectAll();
tf2.selectAll();
tf2.setEchoChar('*'); // 문자를 *로 표시
p.add(tf1); //패널에 텍스트필드 추가
p.add(tf2);
f.add(p); //프레임에 패널붙이기
f.setTitle("Frame Test"); //제목
f.setSize(300,300); // 크기
f.setVisible(true); // 생성
}
}
간단한 채팅 프로그램 구현 예제
import java.awt.*;
import java.awt.event.*;
class AdapterEx extends Frame implements ActionListener {
Panel p1, p2, p3;
TextField tf;
TextArea ta;
Button b1, b2;
public AdapterEx() {
super("AWT 채팅 프로그램");
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
tf = new TextField(35);
ta = new TextArea(10, 35);
b1 = new Button("Clear");
b2 = new Button("Exit");
p1.add(tf);
p2.add(ta);
p3.add(b1);
p3.add(b2);
add("North", p1);
add("Center", p2);
add("South", p3);
setBounds(300, 200, 300, 300);
setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);
tf.addKeyListener(new KeyEventHandler()); //이너 클래스를 생성하는 위치를 리스너 안으로.
//익명 이너 클래스
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
//멤버 이너 클래스
class KeyEventHandler extends KeyAdapter {
public void keyTyped(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_ENTER) {
ta.append(tf.getText()+"\n");
tf.setText("");
}
}
}
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("Clear")) {
ta.setText("");
tf.setText("");
tf.requestFocus();
} else if (str.equals("Exit")) {
System.exit(0);
}
}
}
/*어댑터 사용법
class WindowEventHandler extends WindowAdapter{
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
*/
/*
class KeyEventHandler extends KeyAdapter {
TextField tf;
TextArea ta;
public KeyEventHandler(TextField tf, TextArea ta) {
this.tf = tf;
this.ta = ta;
}
public void keyTyped(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_ENTER) {
ta.append(tf.getText()+"\n");
tf.setText("");
}
}
}
*/
public class AdapterEx2 {
public static void main(String[] args) {
AdapterEx a = new AdapterEx();
}
}
내용이 너무 방대해서 정리를 잘 못한 것 같다..
초보 개발자에게 GUI는 콘솔을 벗어나 처음으로 프론트엔드
개발을 할 수 있게 해주기 때문에 좋은 것 같다.
AWT는 근본이지만 이제는 잘 사용하지 않는 추세라고 하니,
GUI에 관심이 있다면 자바 Swing과 JavaFx를 공부해 보는 것을 추천한다.
참고 문헌 :
'Java > 자바 이론' 카테고리의 다른 글
[Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기 (0) | 2022.07.17 |
---|---|
[Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기 (0) | 2022.07.17 |
[Java] 자바 객체 정렬 Comparable과 Comparator의 이해 (0) | 2022.07.09 |
[Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱) (0) | 2022.07.09 |
[Java] 자바 컬렉션(Collection) 프레임워크란? (0) | 2022.07.06 |