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의 닫기버튼을 누른 후 진행과정
이벤트 | 인터페이스 | 메서드 |
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) |
메서드 | 호출시기 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
■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>을 이용
⦁이외 다양한 옵션이 존재
'Studynote > Computer Science 12' 카테고리의 다른 글
[14.09.16.Tue]시스템프로그래밍::다형성 (0) | 2018.11.05 |
---|---|
[14.09.15.Mon] 시스템프로그래밍 (0) | 2018.11.05 |
[정리]Java Chapter 11 컬렉션 프레임윅과 유용한 클래스 (0) | 2018.11.05 |
11.18.제13장 AWT와 애플릿 (0) | 2018.11.05 |
11.11.제11장 컬렉션 프레임윅과 유용한 클래스 (0) | 2018.11.05 |
댓글