[JAVA] AWT로 창띄우고 버튼과 메모지 만들기 - member, anonymous inner class사용
AWT(Abstrac Window Toolkit)란?
- Java에서 기본적으로 제공하는 GUI 라이브러리로, 다양한 플랫폼에서 동일한 모습의 GUI 애플리케이션을 개발할 수 있도록 합니다.
특징
- Java 언어와 밀접한 통합: AWT는 Java 언어로 작성되었으며, 자바의 객체 지향적인 특성을 그대로 반영하고 있습니다. 따라서 자바 프로그래머들에게 익숙하고 쉽게 사용할 수 있습니다.
- 운영체제 독립성: AWT는 Java Virtual Machine(JVM) 위에서 실행되므로, 운영체제에 종속되지 않고 여러 플랫폼(Windows, macOS, Linux 등)에서 동일한 결과물을 제공합니다.
- 기본적인 컴포넌트 제공: AWT는 버튼, 레이블, 텍스트 필드 등과 같은 기본적인 GUI 컴포넌트를 제공합니다. 이를 활용하여 사용자 인터페이스를 구축할 수 있습니다.
- 이벤트 기반 프로그래밍: AWT는 이벤트-드리븐(event-driven) 방식으로 작동합니다. 사용자의 입력(마우스 클릭, 키보드 입력 등)에 따라 이벤트가 발생하고, 해당 이벤트에 대응하는 코드를 작성하여 원하는 동작을 처리할 수 있습니다.
- 그래픽 지원: AWT는 그래픽 관련 기능도 포함하고 있어 2D 그래픽 요소를 생성하고 조작할 수 있는 기능을 제공합니다.
- 상속 계층 구조: AWT 컴포넌트들은 계층 구조로 구성되어 있으며, 컨테이너(Container) 클래스를 중심으로 다른 컴포넌트들을 포함시켜 복합적인 UI를 만들 수 있습니다.
- 호환성과 안정성: AWT는 오랜 역사와 널리 사용되었던 라이브러리로서 안정성과 호환성이 보장됩니다. 그러나 AWT에 비해 스윙(Swing)과 같은 최신 GUI 라이브러리가 보다 많은 고급 기능과 유연성을 제공하기 때문에 현재는 스윙이 주로 사용되고 있습니다.
AWT와 SWING, JAVAFX의 차이점
1. 디자인 및 외관
- AWT: AWT는 운영체제의 기본적인 UI 디자인을 사용합니다. 따라서 플랫폼에 따라 UI가 달라질 수 있습니다.
- Swing: Swing은 자체적으로 구현된 "룩앤필(Look and Feel)"을 제공하여 독립적으로 일관된 UI를 제공합니다.
- JavaFX: JavaFX는 스타일링 가능한 CSS(Cascading Style Sheets)를 사용하여 다양한 시각적 효과와 커스터마이징 기능을 제공합니다.
2. 컴포넌트의 가벼움
- AWT: AWT 컴포넌트들은 운영체제의 기본 컨트롤(버튼, 체크박스 등)을 사용하므로 상대적으로 무거운 경향이 있습니다.
- Swing: Swing 컴포넌트들은 자체 구현되어 경량화되었으며, JVM에서 직접 그려지기 때문에 가벼우면서 유연성도 높습니다.
- JavaFX: JavaFX는 하드웨어 가속을 지원하며, Scene Graph라는 개념으로 화면 그래픽 처리를 최적화하여 성능을 향상시켜줍니다.
3. 언어 및 문법
- AWT, Swing: AWT와 Swing은 모두 순수한 자바 코드로 작성됩니다.
- JavaFX: JavaFX는 XML 기반의 FXML 파일과 CSS 파일 등 여러 형식으로 GUI를 정의할 수 있는 유연한 언어와 문법을 제공합니다.
4. 이벤트 모델
- AWT, Swing: AWT와 Swing은 이벤트 처리에 대해 간단하고 직접적인 접근 방식을 채용합니다.
- JavaFX: JavaFX는 이벤트 처리를 위해 새로운 이벤트 모델과 바인딩(Binding) 메커니즘 등 다양한 고급 기능을 제공합니다.
5. 멀티미디어 및 3D 지원
- AWT, Swing: 비교적 단순한 그래픽 요소만 지원하며 멀티미디어나 3D 그래픽 처리에 한계가 있습니다.
- JavaFX: 내장된 멀티미디어 재생기(Media Player)와 3D 그래픽 엔진(Java 3D API) 등 다양한 멀티미디어 및 3D 지원 기능이 포함되어 있습니다.
6. 호환성
- AWT, Swing: JDK 설치 시 함께 제공되며 별도의 설치 과정 없이 사용할 수 있습니다.
- JavaFX : JDK 버전에 따라 포함 여부가 다르므로 필요시 별도로 설치해야 합니다.
Java GUI 개발에서 현재 주로 사용되는 추세는 스윙보다는 최신 기술인
JavaFX입니다.
스타일링과 애니메이션 효과, 멀티미디어 재생 등 다양한 고급 기능을 제공하기 때문에 보다 현대적이고 시각적으로 매력적인 애플리케이션 개발에 적합합니다.
메모지 프로그램
package awt;
import java.awt.*;
import java.awt.event.*;
public class AdapterEx extends Frame implements ActionListener {
Panel p1, p2, p3;
TextField tf;
TextArea ta;
Button b1, b2;
public AdapterEx() {
super("Adapter");
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);
//Member Inner Class
KeyAdapter keyAdapter = new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
ta.append(tf.getText() + "\n");
tf.setText("");
}
}
};
tf.addKeyListener(keyAdapter);
//Anonymous Inner Class
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
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);
}
}
public static void main(String[] args) {
new AdapterEx();
}
}
- TextField에서 타자를 치고 엔터키를 누르면 TextArea에 전달되는 메모지와 같은 프로그램을 만들어 보았습니다.
감사합니다!