Chapter 10. AWT & Applet
1. AWT(Abstract Window Toolkit)
- GUI Programming을 하기 위한 도구
- GUI Application의 개발에 필요한 여러 개의 관련 Package와 Class의 집합으로 구성
- 특징
· AWT로 작성된 GUI Application은 Platform에 독립적이기 때문에 여러 종류 OS에서 Code를 수정하지 않고 실행이 가능
· Windows Button과 같은 GUI Component를 직접 구현하지 않고 해당 OS의 Native Component를 사용하기 때문에 AWT로 작성된 GUI Application의 외형은 실행되는 OS마다 달라질 수 있다.
· 여러 종류의 GUI 기반의 OS들이 공통적으로 가지고 있는 Component만으로 구성해야 하기 때문에 AWT가 제공할 수 있는 GUI Component의 수는 제한적이다.
- Swing
· AWT를 확장한 것
· AWT와는 다르게 순수한 Java로 이루어져 있어 AWT보다 다양하고 풍부한 기능의 Component를 제공한다.
· Swing의 Class는 AWT의 Class들을 기반으로 만들어진 자식 Class들이므로 AWT와 Swing은 Component의 종류와 사용법만 다를 뿐 나머지는 거의 같다.
- AWT의 Package
Package |
Explain |
java.awt |
AWT를 이용한 GUI Application을 작성하는데 필요한 기본적인 Class와 Component를 제공 |
java.awt.datatransfer |
여러 Application 사이 또는 단일 Application 내에서의 Data 전송을 구현하는데 필요한 Class와 Interface를 제공 |
java.awt.dnd |
Drag and Drap 기능을 구현하는데 필요한 Class 제공 |
java.awt.event |
GUI Application에서 발생하는 Event를 처리하는데 필요한 Class와 Interface 제공 |
java.awt.font |
Font와 관련된 Class와 Interface 제공 |
java.awt.image |
이미지를 생성하거나 변경하는데 사용되는 Class 제공 |
java.awt.print |
출력에 관련된 Class와 Interface를 제공 |
- Component
· MenuComponent를 제외한 AWT의 모든 Component의 부모 Class이며 추상 Class이다.
· Component Class의 조상 Class는 Object Class이다.
· Component Class와 자식 Class는 Window, Scroll Bar, Button 등 GUI Application Program의 화면을 구성하는데 사용되는 Class이며 AWT Component 또는 Component라고 한다.
· Component의 종류
◦ 일반적인 Component
▹ Menu 관련 Component를 제외한 모든 Component 포함
◦ Menu Component
▹ Menu 관련 Component를 포함
- Container
· 다른 Component를 포함할 수 있으며 Button, Label나 다른 Container를 포함할 수 있다.
· 여러 개의 Overloading된 add Method들이 정의 되어있으며 add Method를 이용해 Container에 다른 Component를 포함시킬 수 있다.
· Container에 포함된 Component는 Container에 설정된 설정 값(배경색, 전경색, 글자체 등)을 따라가게 된다.
· 독립적 Container
◦ 독립적으로 사용될 수 있으며 다른 Component나 종속적인 Container를 포함할 수 있다.
◦ 종류
▹ Frame
▸ 가장 일반적인 Container로 Window와 모양이 같다.
▸ Title Bar와 크기 조절 Button, 닫기 Button을 가지고 있다.
▸ Menu를 추가할 수 있다.
▹ Window
▸ Frame의 부모 Container
▸ 경계선 Title Bar, 크기 조절 Button, 닫기 Button이 없고 Menu 추가가 불가능하다.
▸ Component를 담을 수 있는 평면 공간만을 갖는다.
▹ Dialog
▸ Frame과 같이 Title Bar를 가지고 있지만, Menu는 가질 수 없으며 기본적으로 크기변경이 불가능하다.
▸ 주로 프로그램 사용자에게 Message를 보여주거나 응답을 받는데 사용한다.
· 종속적인 Container
◦ 독립적으로 사용될 수 없으며 다른 Container에 포함되어야만 한다.
◦ 종류
▹ Panel
▸ 평면 공간으로 Frame과 같이 여러 Component를 담을 수 있다.
▸ 단독적으로는 사용이 불가능하다.
▹ ScrollPane
▸ Panel과 같은 평면공간이지만 Panel과는 달리 단 하나의 Componet만 포함할 수 있다.
▸ 자신보다 큰 Component가 포함되면 Scroll Bar가 자동적으로 나타난다.
2. AWT의 주요 Component
- Frame
· 다른 Component를 포함할 수 있는 Container
· 특징
◦ Title Bar, 최대화 Button, 최소화 Button, 닫기 Button, 창 크기조절 기능 제공
◦ Frame 객체는 생성했다고 해서 화면에 출력되는 것이 아니며 setVisible(true)를 사용해 화면에 나타내야 한다.
- Button
· 사용자가 Click 시 어떠한 작업이 수행되도록 Event처리를 할 때 사용
- Choice
· 여러 개의 Item이 있는 목록을 보여주고 한 가지를 선택하도록 할 때 Choice를 사용
· Click해서 Item이 있는 목록을 펼쳐 봐야한다.
- List
· Choice처럼 목록중에 원하는 항목을 선택할 수 있도록 할 때 사용
· Choice와는 달리 Click하지 않아도 모든 목록을 보여주며 Item을 하나 또는 여러 개를 선택할 수 있다.
- Label
· 화면에 글자를 표시할 때 사용
· 설명이나 메시지를 화면에 나타내는데 주로 사용
- Checkbox
· boolean과 같이 true/false 또는 on/off와 같이 둘준 한 값을 가질 수 있는 Component
· 여러 값 중 한가지를 선택할 수 있는 radio Button도 만들 수 있다.
- TextField
· 사용자로부터 값을 입력 받을 수 있는 Component
· 편집이 가능하며 한 줄만 입력할 수 있다.
- TextArea
· 여러 줄의 Text를 입력하거나 보여줄 수 있는 Component로 편집이 가능하다.
· Scroll Bar를 이용해 실제화면에 보이는 것보다 많은 양의 Text를 담을 수 있다.
- Scrollbar
· 사용자가 정해진 범위 내에 있는 값을 쉽게 선택할 수 있도록 해주는 Component
· 속도조절, 색상 선택과 같은 곳에 사용
- Canvas
· 빈 평면 공간을 제공하는 Component
· 그림 그리기, 글 작성을 할 수 있으며 주로 이미지를 위한 공간으로 사용되며 사용자 정의 Component를 만들 때 사용된다.
- Panel
· 다른 Component를 자신의 영역 내에 포함시킬 수 있는 Container
· Panel 자신이 다른 Container에 포함될 수 있고 Panel이 Panel을 포함할 수 있다.
· Frame과 달리 Title Bar, Button이 없는 단지 비어있는 평면 공간만을 갖는다.
· Layout을 관리할 때 도움이 많이 된다.
- ScrollPane
· 다른 Component를 포함시킬 수 있으나 다른 Container들과는 달리 하나의 Component만을 포함할 수 있다.
· 제한된 공간에서 크기가 큰 Component를 화면에 보여줄 수 있도록 하는데 사용되며 포함된 Component의 크기가 ScrollPane 자신보다 큰 경우 Scroll Bar를 이용해 볼 수 있게 해준다.
- Dialog
· 주로 화면에 Message창을 보여주는데 사용되는 Container
· Program의 실행중 Error Message를 발생시키거나 File 삭제 전 사용자로부터 응답을 받아야하는 경우 사용된다.
· Frame과 모양이 유사하다.
· 필수응답(modal)인 경우(true) 부모로 지정된 Frame은 Dialog가 사라지기 전까지는 사용할 수 없게 된다.
- FileDialog
· File을 열거나 저장할 떄 사용되는 Dialog
· 대부분의 기능들이 이미 구현되어 있어 따로 Code를 추가하지 않아도 된다.
3. AWT의 주요 Component 외의 Class
- Font
· 글씨체를 나타낼 시 사용되는 Class
· Component에서 setFont(Font f) Method를 이용하면 Component에 사용되는 글씨체를 변경할 수 있다.
· Font Class의 정수형 상수
◦ Font Style은 정수형 상수를 통해 나타낼 수 있으며 두 가지 이상의 Style을 사용하기 위해서는 사용할 두 상수를 ‘+’를 이용해 더해서 표현할 수 있다.
◦ 상수 종류
▹ Font.PLAIN : 보통체
▹ Font.BOLD : 굵은 글씨체
▹ Font.ITALIC : 기울임체
▹ Font.BOLD+Font.ITALIC : 굵은 기울림체
· Font Class에서 제공하는 글씨체
◦ Font Class에서는 기본적으로 5가지 글씨체를 제공하며 System에 설치된 Font를 사용하기 위해서는 GrapicsEnvironment Class를 사용해야한다.
◦ 글씨체 종류
▹ Serif
▹ SansSerif
▹ Dialog
▹ DialogInput
▹ Monospaced
- Color
· 색을 표현하기 위해 사용되는 Class
· RGB 값을 이용해 색을 표현할 수 있는 객체를 생성해 사용할 수 있다.
· Component의 전경색과 배경색을 설정할 경우 각각 setForeground(Color c), setBackground(Color c)를 사용해 설정한다.
4. Menu
- Menu를 구성하는 Component
· Frame에 Menu를 구성하기 위해 사용하는 Component
· Menu를 구성하는 Component의 부모 Class는 MenuComponent Class이다.
· Menu 내에 Menu를 담아 계층형 Menu를 구성할 수 있다.
· Menu 특징
◦ MenuBar에는 Menu만 포함할 수 있으며 MenuItem은 포함 시킬 수 없다.
◦ Menu에는 Menu와 MenuItem이 포함될 수 있다.
◦ 계층형 Menu를 만들고자 할 때는 Menu에 Menu를 포함시키면 된다.
- PopupMenu
· 고정적인 Menubar와 달리 Frame 내의 어디서나 Mouse의 오른쪽 Button을 누르면 나타나는 위치가 고정되어 있지 않은 Menu
5. Layout Manager
- Layout Manager에 포함된 Component의 배치를 자동적으로 관리해주는 역할을 한다.
- Component의 크기가 변경되어도 배치를 자동적으로 관리해주며 Component를 효율적으로 배치하기 위해서 필수적으로 사용해야 한다.
- Layout Manager 종류
· BorderLayout
· FlowLayout
· GridLayout
· CardLayout
· GridbagLayout
- Container 별 기본 Layout Manager
· FlowLayout : Panel, Applet
· BorderLayout : Window, Dialog, Frame
- BorderLayout
· 5개의 영역(North, South, East, West, Center)으로 나누고 각 영역에 하나의 Component만을 배치하는 Layout Manager
· 한 영역에 하나 이상의 Component를 넣기 위해서는 Panel에 원하는 Component를 넣은 다음 BorderLayout의 한 영역에 해당 Panel을 넣어야 한다.
· BorderLayout은 Container인 Window, Frame, Dialog의 기본 Layout Manager로 해당 Container의 Layout Manager를 따로 설정하지 않으면 생성될 때부터 이미 BorderLayout으로 설정되어 있다.
- FlowLayout
· Component가 추가되는 순서에 따라 왼쪽에서 오른쪽으로 이어나가며 공간이 부족하면 아랫줄에 추가되는 Layout
· 왼쪽 정렬, 오른쪾 정렬, 가운데 정렬이 가능하다.
- GridLayout
· Table처럼 행과 열로 나누어 Component를 배치한다.
· 추가되는 Component는 모드 같은 크기로 나누어지며 Container의 크기를 변경하면 각 영역이 모두 같은 비율로 커지거나 작아진다.
- CardLayout
· 여러 화면을 Slide처럼 바꿔가며 보여줄 수 있는 Layout
· 여러 개의 Container를 CardLayout을 추가한 다음 순서대로 또는 임의의 Container를 선택해서 보여줄 수 있다.
· Program 설치시 단계별로 다른 화면으로 이동하는 경우에 사용된다.
6. Event Handling
- Event
· 사용자 또는 Program Code에 의해 발생할 수 있는 사건
· Event 관련 용어
◦ Event Source
▹ Event가 발생한 Component
▹ 사용자가 Button을 눌렀을 때 Event가 발생하고 Button은 이 Event의 Event Source가 된다.
◦ Event Handler
▹ Event가 발생했을 때 실행될 Code를 구현해 놓은 Class
◦ Event Listener
▹ Event를 감지하고 처리하는 감지기 역할을 한다.
▹ Event Handler를 Event Listener로 Event Source에 연결해야하는 Event가 발생했을 때 Event가 처리된다.
- Event 상속도
- Event의 발생과 처리
· Event Handling은 Exception Handling의 방법과 유사하다.
· Event의 발생과 처리
◦ Event가 발생하면 해당 Event Class의 Instance가 생성된다.
◦ Event를 처리할 Listener가 Event Source에 등록되어 씨는지 확인한다.
◦ 등록된 Listener 중에서 발생한 Event를 처리할 Listener가 있으면 Listener가 Event를 처리한다.
◦ Event를 처리할 Listener가 없으면 아무 일도 일어나지 않는다.
- Event 처리 방법
· Event Handling
◦ 사용자의 어떠한 동작에 의해서 Event가 발생했을 때 이에 대해 적절한 작업을 수행하도록 하는 것
· Event 처리 단계
◦ Event 처리 시 필요한 Method를 찾는다.
◦ 선택한 Method가 속해있는 Interface를 구현하는 Class를 작성한다.
◦ 위에서 구현한 Class의 Instance를 생성해서 Event Source에 Listener로 등록한다.
· Event 종류와 관련 Interface 및 Method
- Adapter Class
· Event Handler를 작성 시 Event Handle에 필요한 Method 개수와는 관계없이 해당 Event Listener에 정의된 모든 Abstract Method를 구현하기는 불편하며 이를 해소하기 위해 고안된 Class이다.
· Event Listener 대신 Adapter Class를 상속받아 원하는 Method만을 작성하는 방식이다.
· Example
1
2
3
4
5
6
7
8
9
10
11
12
13 |
class KeyHanler implements KeyListener {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
puglic void keyReleased(KeyEvnet e) { };
puglic void keyTyped(KeyEvnet e) { };
}
class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
} |
cs |
◦ Adapter Class는 Event Listener에 정의된 Method를 아무 내용 없이 구현해 놓았을 뿐이며 이를 상속받은 Class에서 Overriding해서 사용하게 된다.
7. Graphic of AWT
- paint()
1
2
3 |
public void paint(Graphics g) {
......
} |
cs |
· Component에 그림을 그리기위한 것으로 Component Class에 정의되어 있다.
· 그리고자 하는 Component(Frame, Canvas, Panel 등)의 paint()에 맞게 Overriding하면 된다.
· Graphics
◦ Graphics 객체는 각 Component의 Graphic 관련 정보가 담겨있다.
◦ 모든 Component가 가지고 있다.
◦ Component에 그림을 그리고자 할 때는 getGraphics()를 호출해서 Component의 Graphics 객체에 대한 참조를 얻어내서 Graphics 객체가 가지고 있는 다양한 Grahpic Method를 이용해 작업한다.
- AWT Thread & repaint()
· paint()는 개발자가 직접호출하지 않아도 AWT Thread에 의해서 자동적으로 호출된다.
· AWT Thread는 GUI Application을 실행하면 자동적으로 생성되는 Daemon Thread로 대기상태에 있다가 화면이 갱신되어야할 상황이 발생되면 paint() 또는 update()를 호출해서 화면이 다시 그려지도록한다.
· AWT Thread에 의해 자동적으로 화면이 갱신되는 상황
◦ 처음 화면에 나타날 때
◦ 다른 화면에 가려져 있던 부분이 다시 화면에 나타날 때
◦ Icon화 되어 있다가 원래 크기로 화면에 나타날 때
· AWT Thread에 의해 자동적으로 화면이 갱신되는 상황 외에 화면에 다시 그려지도록 하려면 repaint()를 호출하면 된다.
· repaint()
◦ AWT Thread에게 화면을 다시 그릴 것을 요청한다.
◦ 요청을 받은 AWT Thread는 update()를 호출하고 update()는 paint()를 호출한다.
- Image Class
· gif, jpg와 같은 ImageFile을 보여주거나 가상화면을 생성하는데 사용하는 Class
· Example
1
2
3 |
Toolkit tk = Toolket.getDefaultToolkit();
Image img = tk.getImage(“getjava.gif”);
g.drawImage(img, 0, 0, this); |
cs |
※ this를 사용하는 이유
> 모든 AWT Component는 ImageObserver Interface를 구현했기 때문에 ImageObserver로 Component 자신(this)를 지정한다.
8. Applet
- Applet
· Web Browser를 통해 실행될 수 있는 Java Class이다.
· 특징
◦ Applet 관련정보가 포함된 HTML 문서를 작성해야한다.
◦ java.exe가 아닌 Web Browser를 통해 실행된다.
◦ main Method가 필요없다.
◦ Applet은 java.applet.Applet을 상속하는 public Class여야한다.
- Life cycle & Method
· Applet 실행과정
◦ Web Browser가 Applet이 포함된 HTML 문서를 읽는다.
◦ Web Browser가 Applet(Java Class)을 Download한다.
◦ Applet이 초기화된다.(init() Method 호출)
◦ Applet이 실행된다.(start() Method 호출)
- Security Restriction
· Applet은 Network을 통해 외부로부터 자동으로 Download 받는 Program이기 때문에 보안상 잠재적인 위험요소를 가지고 있으며 몇몇 작업을 수행하는 것이 금지되어 있다.
· 금지된 작업
◦ 사용자의 Computer에 있는 실행 File을 실행하는 것
◦ 사용자 Computer의 File을 읽거나 쓰기
◦ 사용자 Computer의 정보 읽기
◦ Applet을 제공한 Server가 아닌 다른 Computer에서 Socket 열기
◦ Native Method 호출
- HTML Tag
· Applet을 사용하기 위한 HTML Tag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
<APPLET
[ARCHIVE=archiveList]
CODE=appletFile.class
WIDTH=pixels
HEIGHT=pixels
[CODEBASE=codebaseURL]
[ALT=alternateText]
[NAME=appletInstanceName]
[ALIGN=alignment]
[VSPAGE=pixels]
[HSPACE=pixels]
>
[<PARAM NAME=appletAttribute1 VALUE=value>]
[<PARAM NAME=appletAttribute2 VALUE=value>]
...
</APPLET> |
cs |
◦ ARCHIVE
▹ Applet 사용되는 Class File이나 Image File이 담긴 jar File을 지정하는데 사용
▹ jar File이 하나 이상일 때는 쉼표(,)를 구분자로 사용
◦ CODE
▹ Applet Class의 Class File을 지정하는데 사용
▹ [Package Name].[Class Name].class 형태로 지정
◦ WIDTH, HEIGHT
▹ Applet이 Web Browser에 보여질 영역의 폭과 넓이를 지정하는데 사용
◦ CODEBASE
▹ Applet을 Download할 경로(URL)을 지정하는데 사용
▹ 이 Option이 없으면 Applet이 담긴 HTML의 경로가 codebase가 됨
◦ ALT
▹ <APPLET> Tag를 이해하지 못하는 Web Browser에서 Applet 대신 보여줄 Text를 지정하는데 사용
◦ NAME
▹ Applet의 이름을 지정하는데 사용
▹ 하나의 HTML Page에 둘 이상의 Applet이 있을 때 서로 구별되도록 할 수 있음
◦ ALIGN
▹ Applet의 정렬위치를 지정하는데 사용
▹ HTML의 Tag에 사용되는 align Option(left, right, top, bottom 등)과 동일한 값이 사용될 수 있음
◦ VSPACE, HSPACE
▹ Applet의 외부 여백을 지정하는데 사용
◦ <PARAM NAME=attribute VALUE=value>
▹ 외부에서 Applet에 값을 전달할 떄 사용
▹ Java Application을 실행할 때 Command Line에서 값을 입력하는 것과 유사
▹ Applet 내부에서는 getParameter(String name) Method를 사용해서 값을 읽을 수 있음
'Java > Theory' 카테고리의 다른 글
Chapter 9. Thread (0) | 2015.08.22 |
---|---|
Chapter 8. Useful Classes II (0) | 2015.08.19 |
Chapter 7. Useful Classes I (0) | 2015.08.19 |
Chapter 6. Collection Framework (0) | 2015.08.19 |
Chapter 5. Inner Class (0) | 2015.08.19 |