본문 바로가기
Studynote/Computer Science 12

[정리]Java Chapter 13 AWT와 애플릿

by e.sunie 2018. 11. 5.

1. AWT

 

1. AWT란?

⦁AWT란 윈도우프로그래밍을 하기 위한 도구

⦁GUI란 사용자가 그래픽을 통해서 하드웨어와 상호작용하는 환경

텍스트기반의 에플리케이션의 반대 개념,

⦁Swing이란 AWT의 속도 측면을 개선한 도구, 직접 컴포넌트를 구현한다.

 

2. AWT의 구성

패키지명이 ‘java.aw’로 시작하면 모두 AWT관련 패키지

 

⦁모든 컴포넌트의 조상은 Component클래스 (메뉴 관련 컴포넌트 제외)

⦁컴포넌트란 ?

Component클래스와 그 자손 클래스들을 일컫으며, GUI응용프로그램의 화면을 구성하는데 사용되는 클래스이다.

 

컴포넌트의 종류

1. 일반적인 컴포넌트

-버튼, 체크박스

-최상위조상 : Component

2. 메뉴컴포넌트

- 메뉴와 관련된 컴포넌트

- 최상위조상 : MenuComponent 

 

 

3. 컴포넌트

컴포넌트는 MenuComponenet를 제외한 AWT의 모든 컴포넌트의 조상이고 추상클래스이다.

 

4.컨테이너

⦁Component의 자손, 컴포넌트의 보관한 개념

⦁윈도우창이라고 생각 가능

⦁다른 컴포넌트를  포함할 수 있다. 일반적인 컴포넌트 포함가능, 컨테이너도 포함가능

⦁컨테이너의 종류

1.독립적인 컨테이너 : 독립적으로 사용가능, 다른 컴포넌트나 종속 컨테이너를 포함

2. 종속 컨테이너 : 독립적으로 사용불가, 다른 컨테이너에 포함


- add메서드를 사용해서 다른 컴포넌트를 포함

- 기본 컨테이너에 설정된 배경색, 전경섹,글자체 등의 설정을 그대로 따른다.

 

2. AWT의 주요 컴포넌트

 

(1)Frame

⦁가장 기본적인 컴포넌트

⦁다른 컴포넌트들을 포함할 수 있는 컨테이너

⦁titlebar와 최대화/최소화/닫기 버튼이 있고 크기 조절 가능

- 윈도우와 같은 기능

- 실행 정지는 콘솔창에 Ctrl+c나 윈도우에 Ctrl+Alt+Delete 키를 누른후 java.exe선택

- setSize()로 크기조절을 하고 setVisibl()로 화면을 나타내야한다

 

⦁Toolkit클래스의 getScreenSize()를 이용해서 Frame이 화면 중앙에 나타나도록 설정

 

 

 

 

 

(2)Button

⦁사용자가 클릭할 때 어떤 작업을 수행

-Frame은 컨테이너이기에 다른 컴포넌트를 포함가능

-Frame에 설정되어 있는 레이아웃 매니저로 인해 Frmae크가와 Button이 같은 사이즈를 갖도록 나온다.

- 레이아웃 매니저는 컨테이너의 크기가 변경될 때마다 컨테이너에 포함된 컴포넌트들의 크기와 위치를 자동적으로 관리해준다. → 컴포넌트의 배치의 편리성(장점)

- BorderLayout : 기본 디폴트 FlowLayout로 변경시 크기를 다르게 설정가능

- setLayout()에 null값을 저장하여 Frame의 레이아웃 매니저 지정해지

- 레이아웃 매니저를 지정하지 않을 경우 Button의 크기와 위치를 수동적을 지정해주어야함

 

(3)Choide

⦁여러 개의 아이템이 있는 목록을 보여주고, 그 중 한가지를 선택하도록 함

-add()를 이용하여 Coice에 나타날 항목 추가

 

(4)List

⦁처음부터 모든 항목 목록을 보여주며, 목록의 항목 중에서 하나 또는 여러 개를 선택

 

(5)Label

⦁화면에 글자를 표시

⦁설명이나 메시지를 나타낼 때 사용

 

(6)Checkbox

⦁boolean과 같이 true/false 또는 on/off와 같이 둘 중 한 값을 가질 수 있는 컴포넌트

⦁checkboxGroup 이용시, 여러 가지 값들 중에서 한 가지를 선택 할 수 있는 radio button도 생성 가능(4지선다)

-첫 번째 질문의 경우 Checkbox를 그룹화 하지 않았기에 독립적 선택가능

- 결과창에 new에 체크가 되어 있는 것은 생성자의 두 번째 매개변수를 ture로 설정했기에

- 기본적으로는 false로 설정되어있다.

- 두 번째 세 번째 질문은 CheckboxGroup을 이용해 그룹화하였기에 라디오 버튼으로 구현된다. 따라서 한가지만 선택 가능

 

(7)TextField

⦁사용자로부터 값을 입력 받을 수 있는 컴포넌트

⦁편집가능, 한 줄만 입력 가능 → 짧은 값의 입력에 유용

- setEchoChar(char c)를 이용하여 비밀번호를 ‘*’으로 나타낼 수 있다.

 

(8)TextArea

⦁여러 줄의 text를 입력하거나 보여줄 수 있는 편집가능한 컴포넌트

⦁스크롤바를 사용 가능 → 많은 양의 텍스트를 저장할 수 있다


(9)Scrollbar

⦁사용자가 정해진 범위 내에 있는 값을 쉽게 선택할 수 있도록 해주는 컴포넌트

⦁ 볼륨설정, 속도조절, 색생 선택 등에 사용

 

(10)Canvas

⦁빈 평면 공간을 제공하는 컴포넌트

⦁그림이나 글자를 적을 수 있다 → 그림이나 이미지를 위한 공간이나 사용자정의 컴포넌트 생성시 사용

(11)Panel

⦁다른 컴포넌트를 자신의 영역 내에 포함시킬 수 있는 컨테이너

⦁Pnel이 다른 컨테이너에 포함될 수도, 자기 스스로 포함할 수도 있다.

⦁Frame과 달리 빈 평면공간만 갖는다

⦁Panel 이용시, Frame내에서 컴포넌트의 배치를 다양하게 할 수 있다.


(12)ScrollPane

⦁단 하나의 컴포넌트만 포함시킬 수 있는 컨테이너

⦁제한된 공간에서 크기가 큰 컴포넌트를 화면에 보여줄 수 있도록 하는데 사용

⦁포함된 컴포넌트가 자기보다 큰 경우 스크롤바를 이용

 

(13)Dialog

⦁화면에 메시지창을 보여주는데 사용

⦁다른 컴포넌트를 포함할 수 있는 컨테이너

- Dialog를 사용하려면 하나의 프레임이 Dialog의 부모로 지정되어야 한다.

- 상속의 개념보단 어떤 프레임과 관련성을 보기위함

- Dialog가 modal(필수응답)의 경우, 부모Frame은 Dialog가 사라지기 전까지 사용불가

- modal값을 false로 설정하여 Dialog가 열여있더라도 부모Frame을 사용가능

 

(14)FileDialog

⦁파일을 열거나 저장할 때 사용되는 Dialog

-파일을 선택하지 않고 취소할 경우, getFile()이 null을 반환


3. 그 외의 AWT 클래스

1.Font

⦁컴포넌트에 사용되는 text의 글자체를 원하는 것으로 지정

⦁setFont(Font f)로 구현

⦁Font 인스턴스 생성을 위한 생성자

- style에 사용되는 내용들은 Font의 static맴버인 정수형 상수 → 덧셈연산가능

- JDK에서 5가지의 기본적 폰트 제공, 이외의 폰트는 컴퓨터에 설치가 되어있어야함

 

2. Color

⦁ RGB값으로 색을 표현하기 위해 사용

⦁ Color클래스 내 자주 쓰이는 13가지색이 static맴버변수로 정의

⦁ 주로 setForeground(Color c), setBackground(Color c)와 같은 배경색과 전경색을 설정하는 메서드의 매개변수로 사용

 

 

4. 메뉴만들기

 

1.메뉴를 구성하는 컴포넌트

메뉴관련 컴포넌트의 조상 : MenuComponent

⦁ 메뉴에 메뉴를 담아 계층형으로 메뉴를 구성 할 수 있다.

⦁ 항상 화면에 나타나는 최상위 메뉴는 MunuBar에 담고 MenuBar는 다시 Frame에 추가하므로써 메뉴 작성 종료

- setHelpMenu()에 의해 Help메뉴로 지정된 메뉴는 OS마다 다르게 취급

 

⦁컴포넌트들의 종류 분류

 

Menu – File, Edit, View, Help, Others

MenuLtem – New, Open, Print..., Print Preivew, Print Setup..., Exit

CheckboxMenuLtem - Statusbar

 

-Menu(File)아래에 Menu(Others)를 넣어 계층형 메뉴가 가능하도록 했다

 


2.PopupMenu

⦁ Frame내의 어디서나 마우스의 오른쪽 버튼을 누르면 나타나는, 위치가 고정되어있지 않은 메뉴

 

5. 레이아웃 매니저

1. 레이아웃 매니저를 이용한 컴포넌트 배치

 

⦁레이아웃 매니저

컨테이너에 포함된 컴포넌트들의 베치를 자동적으로 관리해주는 역할

컨테이너에 새로운 컴포넌트가 추가될 경우, 컨테이너의 크기가 변경될 경우, 컨테이너에 포함된 컴포넌트들의 재배치를 레이아웃 매니저가 자동적으로 처리 → 코드의 재작성 필요없음

 

 

레이아웃 매니저의 종류

- BorderLayout

- FlowLayout

- GridLayout

- CardLayout

- GridbagLayout

 


2. BorderLayout

⦁North, South, East, West, Center 로 구성

⦁각 영역에 하나의 컴포넌트만 배치

⦁한 영역에 여러개의 컴포넌트 배치시, 마지막 컴포넌트만 구현

⦁하나 이상의 컴포넌트를 배치하기 위해 Panel 사용

Panel에 원하는 컴포넌트들을 넣은 후, BroderLayout의 한 영역에 다시 이 Panel를 추가

⦁Window, Frame, Dialog 컨테이너의 기본 레이아웃

- Frame의 크기를 상하로 늘릴 경우, North South영역의 변화 없음

- Frame의 크기를 좌우로 늘릴 경우, West East영역의 변화 없음

- add메서드를 사용하여 각 영역에 컴포넌트 추가

- 5개의 영역 모두 채울 필요 없음

 

3. FlowLayout

⦁ 컴포넌트들이 추가되는 순서에 따라 왼쪽에서 오른쪽으로 이어져나가며, 공간 부족시 아랫줄에 추가

⦁컴포넌트의 정렬에 있어서 왼쪽정렬, 오른쪽 정렬, 가운데 정렬 가능

4.GridLayout

⦁컨테이너를 테이블처럼 행과 열로 나누고 컴포넌트 배치

⦁추가되는 컴포넌트 모두 같은 크기를 갖음, 크기 변경시 모두 같은 비율로 변경된다

5. CardLayout

⦁여러 화면을 슬라이드처럼 바꿔가며 보여줌

⦁여러 개의 컨테이너를 CardLayout에 추가한 다음, 순서대로/임의로 컨테이너를 선택해서 보여줄 수 있다.

- Fame 레이아웃 매니저를 CardLayout으로 설정

- CardLayout에 3개의 Panel을 추가

 

6. 이벤트 처리

 

1.이벤트란?

⦁사용자 또는 프로그램 코드에 의해서 발생할 수 있는 사건

- 이벤트 처리 : 이벤트에 대한 수행 코드를 작성하여 이벤트 소스에 이벤트 리스너로 등록하는 것

 

2. 이벤트의 발생과 처리

⦁이벤트의 발생과 처리과정

이벤트 발생시, 해당 이벤트 클래스의 인스턴스 생성

→ 이벤트를 처리할 이벤트 리스너가 이벤트 소스에 등록되어 있는지 확인

→ 등록되어있을 경우 이벤트 리스너가 이벤트를 처리, 없을 경우 아무일도 일어나지 않는다.

 

⦁예외처리와 유사

 

3. 이벤트 처리방법

⦁이벤트 처리란?

AWT프로그램 실행 중에 사용자의 어떠한 동작에 의해서 이벤트가 발생했을 때, 이에 대해 적절한 작업을 수행되도록 하는 것

- 이벤트 처리를 추가하여 닫기 버튼을 눌렀을 때 Frame이 닫히도록 설정


-EvenHandler클래스는 WindowListener인터페이스를 구현해야한다.

→WindowListener인터페이스에 정의되어 있는 모든 추상 메서드의 몸통 부분을 만들어 주어야 한다.

→내용은 업지만 메서드의 몸통을 만듬, 실행시 아무 일도 안하고 종료된다

 

 

⦁Frame의 닫기버튼을 누른 후 진행과정

 

 

 

 

 

 

 

[표] Event의 종류와 관련 인터페이스

이벤트

인터페이스

메서드

ActionEvent

ActionListener

actionPerformed(ActionEvent ae)

ComponentEvent

ComponentListener

componentMoved(ActionEvent ae)

componentHidden(ActionEvent ae)

componentResized(ActionEvent ae)

componentShown(ActionEvent ae)

MouseEvent

MouseMotionListener

mouseDragged(MouseEvent me)

mouseMoved(MouseEvent me)

MouseListener

mousePressed(MouseEvent me)

mouseReleased(MouseEvent me)

mouseEntered(MouseEvent me)

mouseExited(MouseEvent me)

mouseClicked(MouseEvent me)

MouseWheelEvent

MouseWheelListener

mouseWheelMoved(MouseWheelEvent e)

KeyEvent

KeyListener

keyPressed(KeyEvent de)

keyReleased(KeyEvent de)

keyTyped(KeyEvent de)

TextEvent

TextListener

textValueChanged(TextEvent te)

FocusEvent

FocusListener

focusGained(FocusEvent fe

focusLost(FocusEvent fe)

ItemEvent

ItemListener

itemStateChanged(ItemEvent ie)

AdjustmentEvent

AdjustmentListener

adjustmentValueChanged(AdjustmentEvent ae)

WindowEvent

WindowListener

windowClosing(WindowEvent we)

windowOpened(WindowEvent we)

windowIconified(WindowEvent we)

windowDeiconified(WindowEvent we)

windowClosed(WindowEvent we)

windowActivated(WindowEvent we)

windowDeactivated(WindowEvent we)

WindowFoucusListener

windowGainedFocus(WindowEvent e)

windowLostFocus(WindowEvent e)

WindowStateListener

windowStateChanged(WindowEvent e)

ContainerEvent

ContainerListener

componentAdded(ContainerEvent ce)

componentRemoved(ContainerEvent ce)

 

 

[표] 이벤트 리스너를 Component에 추가/제거하는 메서드

메서드

호출시기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

■ActionEvent

⦁고수준 이벤트로 컴포넌트에 정의된 동작이 수행될 경우 발생한다.

 

-이하 생략

 

4. Adapter클래스

 

⦁이벤트 핸들러의 단점

: 작성시 이벤트 처리에 필요한 메서드의 개수와는 관계없이 해당 이벤트 리스터(인터페이스)에 정의된 모든 추상메서드를 구현해야한다

 

⦁Adapter클래스

이벤트 리스너를 직접 구현하는 대신에 Adapter클래스를 상속받아서 원하는 메서드만 작성(오버라이딩) 하면된다.

- KeyAdapter를 구현한 대신 KeyAdapter를 상속받았기에 원하는 메서드만 작성

-Adapter클래스는 단지 이벤트 리스너에 정의된 메서드를 아무 내용도 없이 구현만 해놓음

 

7. AWT의 그래픽

1. paint()와 Graphics

 

■paint()

⦁그림을 그리기 위한 것으로 Component클래스에 정의

⦁그림을 그리고자 하는 컴포넌트에 오버라이딩하여 사용

- 매개변수로 Graptics 선언, 작성시 Graphic이 갖고 있는 다양한 그래픽메서드 이용

 

■Graphics

⦁각 컴포넌트의 그래픽 관련 정보 내포

- getGraphics()를 호출하여 컴포넌트의 Graphics객체에 대한 참조를 먼저 얻은 다음 Graphics객체가 가지고 있는 다양한 그래픽 메서드를 이용하여 작업

 

 

관련메서드

설명

문자출력관련 메서드

 

 

 

 

 

 

 

 

 

색과 관련 메서드

 

 

 

 

 

도형과 관련 메서드

 

-선을 그리는 메서드

 

 

-타원을 그리는 메서드

 

 

 

 

-사각형을 그리는 메서드

 

 

 

 

-둥근 사각형을 그리는 메서드

 

 

 

 

-입체 사각형을 그리는 메서드

 

 

 

 

-호를 그리는 메서드

 

 

 

 

-다각형을 그리는 메서드

 

 

 

 

 

 

기 타

 

 

 

 

 

 


2. AWT쓰레드와 repaint()

 

⦁AWT쓰레드는 GUI어플리케이션을 실행하면 자동적으로 생성되는 데몬쓰레드

⦁화면이 갱신되어야 할 상활 발생되면 paint() 또는 pdate()를 호출해서 화면이 다시 그려지도록 한다

 

⦁위의 상황이외에도 화면이 다시 그려지도록 하려면 repaint()호출


3. Image를 이용해서 이미지 출력하기

⦁Image클래스는 gif, jpg 평식의 이미지 파일을 보여주거나 가상화면을 생성하는데 사용

 

Toolkit tk = Toolkit.getDefaultToolkit();

Image img = tk.getImage(“getjava.gif”);

g.drawImage(img,0,0,this);

 

- drawImage(Image img, int x, int y, ImageObserver obj) : Graphics가 제공하는 메서드, 이미지(img)를 지정된 위치(x,y)에 출력한다.

- -ImageObserver로 이미지가 로딩되고 있는 상태를 알려줌

 

8. 애플릿

1. 애플릿이란?

⦁ 작은 어플리케이션, main메서드가 없이도 웹브라우저를 통해 실행될 수 있는 자바클래스

 

⦁모든 애플릿이 상속받아야하는 java.apple.Applet의 조상의 java.awt.panel

⦁애플릿 역시 다른 컴포넌트를 포함할 수 있는 컨테이어와 동일한 기능을 수행

- 애플릿 실행을 위해 Applet.html을 웹브라우저로 열면된다.

- HelloApplet.class파일 : 애플릿의 클래스 파일 , AppletTest.html과 같은 디렉토리에 위치하거나 <applet>태그에 옵션을 사용해서 각각의 경로를 지정해주어야 한다

 

⦁애플릿뷰어를 사용하여 애플릿 실행가능

-애플릿 뷰어 : 최소한의 기능을 가진 웹브라우저

 

2. Applet의 생명주기와 주요 메서드

⦁애플릿의 실행과정

 

- init()과 start()같은 메서드는 상황에 따라 웹브라우저에 내장되 JVM에 의해 자동적으로 호출된다 → 언제 호출되는지를 잘 알아야하며 용도에 맞게 오버로딩해야한다

- 애플릿이 화면에 보이지 않는 동안 불필요한 CPU의 점유를 막기위해 Stop()이 자동적으로 호출되어 애플릿의 실행을 중지시키고 start()가 호출되어 애플릿의 실행이 계속되도록 구성

 

3. Applet의 보안 제약

⦁애플릿은 네트윅을 통해 외부로부터 자동으로 다운받는 프로그램이기에 보안상 잠재적 위험이 있음

⦁ 애플릿 작업에 있어 제약을 두어 보안

 

 

- 위의 작업을 시도시 예회가 발생

- 제약을 해제하고 싶을 경우, jarsigner.exe와 keytool.exe를 사용해서 서명된 애플릿으로 만들거나 policytool.exe를 이용해서 정책파일을 변경하면 제약의 일부 또는 전체가 풀림

 

4. Applet과 HTML태그

⦁애플릿을 HTML페이지에 포함시킬 경우 <APPLET>을 이용

⦁이외 다양한 옵션이 존재

 

댓글