자바에서 사용 가능한 GUI (Graphic User Interface) 객체의 종류로는 두 가지를 꼽을 수 있는데, AWT와 스윙이다.
GUI는 입출력과 결과값 리턴을 Command 창에서만 할 수 있었으나 하나의 윈도우 창을 띄운 뒤 버튼과 라벨 등으로 꾸밀 수 있는 것을 말한다.
1. AWT (Abstract Window Toolkit)
해당 시스템에서 실행될 시 해당 컴포넌트를 사용하는 GUI이다.
자바 시스템에서 실행된다고 할 경우에는 자바 컴포넌트를 사용하기 때문에 여러 컴포넌트에서 AWT를 사용한다고 할 경우
실행하는 컴포넌트의 모습이 서로 달라 일관된 화면을 제공하는 데에 어려움이 따른다. 자바 초기 버전에 제공되던 GUI이다.
2. 스윙 (Swing)
자바에서 컴포넌트를 작성시 화면이 일관되게 나오는 GUI이다.
AWT로 GUI를 사용했던 시절에는 버튼의 롤오버나 풍선말 등을 AWT로 구현하지 못했기 때문에
가장 큰 단계의 컨테이너만을 운영체제(AWT) 로 지원하고, 그 하부의 컴포넌트들은 직접 자바 코드로 그렸었다.
그러한 불편함을 해소하기 위해 등장한 GUI가 스윙이며, 스윙은 운영체제가 대신 해주던 일을
JVM (Java Virtual Machine)이 대신 해줘야 하기 때문에 AWT와는 확연히 다른 구조를 가지며 주로 GUI 구성에서 많이 사용된다.
화면이 일관적이기 때문에 현재는 스윙 사용을 권장하는 편이다.
스윙의 컴포넌트는 대부분이 javax.swing.JComponent 클래스로부터의 상속을 받아 구현한다.
(AWT와 구분을 하기 위해 클래스명 맨 앞에 J~가 붙음)
* Container > JComponent > Swing
* Swing 특징
순번 |
특징 |
1 |
더블 버퍼링 지원 |
2 |
각 컴포넌트의 속성값 설정 가능 |
3 |
컴포턴트에 투명 효과를 줄 수 있음 |
4 |
Tool tip / border 지원 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 |
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
//JFrame을 상속받는 Pizza 클래스
public class Pizza extends JFrame {
// Constructor method
public Pizza() {
// frame size settting
setSize(500, 150);
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); : 메인 프레임 닫을 때,
// 프로그램 또한 안정적으로 종료됨
// 지정하지 않을 시 메인프로그램은 닫혀도
// JFrame 객체는 JVM에서 계속 살아 있음
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame title setting
setTitle("Frame Test");
// panel 객체 생성
JPanel panel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
// panel 색상 설정
panel.setBackground(Color.BLUE);
panel1.setBackground(Color.CYAN);
panel2.setBackground(Color.GREEN);
// 라벨 객체 생성, panel1에 라벨 추가
JLabel label = new JLabel("피자 종류를 선택하세요.");
panel1.add(label);
// 버튼 객체 생성
JButton button1 = new JButton("치즈");
JButton button2 = new JButton("불고기");
JButton button3 = new JButton("포테이토");
// panel2에 button1, 2, 3 추가
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
// panel에 panel1, panel2 추가
panel.add(panel1);
panel.add(panel2);
// 프레임에 panel 추가
add(panel);
setVisible(true);
}
}
public class PizzaMain {
public static void main(String[] args) {
Pizza pizza = new Pizza();
}
} |
cs |
3. AWT vs 스윙 비교
특징 |
AWT |
Swing |
무게 |
중량 컴포넌트 (컴포넌트를 운영체제의 GUI와 연결시키므로, 운영체제에 따라 다른 모양과 배치를 띔) |
경량 컴포넌트 (직접 컴포넌트를 만들어 구현함) |
패키지 |
java.awt.*; |
javax.swing.*; |
장점 |
각 운영체제에서의 구현이 쉬움 |
운영체제간 버그를 자동적으로 해결함 |
'BackEnd > Java' 카테고리의 다른 글
Java :: 열거형 (Enumeration) (Java 5.0 이상) (0) | 2017.02.13 |
---|---|
초기화 블록 (Initialization block) (0) | 2017.02.13 |
람다식과 함수형 프로그래밍 (Java 8.0 이상) (0) | 2017.02.09 |
자바 기본 정리 (0) | 2017.02.09 |
Java :: startsWith() vs indexOf() vs charAt() (0) | 2016.12.26 |