본문 바로가기

프로그래밍/Java

[Java 요약 정리] 13. AWT(Abstract Window Toolkit)

1. AWT(Abstract Window Toolkit)


1) AWT란?

- GUI프로그래밍(윈도우 프로그래밍)을 위한 도구

- Java로 구현하지 않고 OS의 컴포넌트를 그대로 사용(OS 종속적)


2) Swing

- AWT를 확장한 GUI프로그래밍 도구

- AWT보다 더 많은 종류의 컴포넌트 제공

- OS의 컴포넌트를 사용하지 않고 Ja로 구현


3) AWT의 구성

- AWT관련 패키지는 모두 java.awt로 시작

- AWT컴포넌트의 최상위 조상은 java.awt.Component 클래스(메뉴 관련 컴포넌트 제외)


4) Container

- 다른 컴포넌트를 포함할 수 있는 컴포넌트

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

- 종속적인 컨테이너: 독립 사용 불가(다른 컨테이너에 포함)

- add()를 사용해서 추가

- 컨테이너에 담기는 컴포넌트는 컨테이너의 설정을 따름(변경 가능)


2. AWT의 주요 컴포넌트


1) Frame

- titlebar와 최소화, 최대화, 닫기 버튼을 가진 윈도우(컨테이너)

- 생성자: Frame(String title)

ex) Frame f = new Frame("Hi") // Hi 프레임 생성

- setSize(int, int): 사이즈 설정

- setLayout(new 레이아웃명()): 레이아웃 설정

- setVisible(true): 프레임 시각화

- 프레임참조변수.add(컴포넌트 참조변수): 컨테이너에 컴포넌트 추가


2) Button

- 사용자가 클릭했을 때 작업이 수행되도록 하는 컴포넌트

- 생성자: Button(String label)

- setLocation(int, int): 위치 설정


3) Choice(Combo Box)

- 여러 아이템 중 하나를 선택할 수 있게 만드는 콤보박스 컴퍼넌트

- 생성자: Choice()

- 초이스참조변수.add("속성"): 목록에 값 추가


4) List

- 리스트 컴포넌트

- 생성자: List(int rows, boolean multipleMode) // 나타낼 줄의 수, 다중선택 가능 여부

* List(int row)로 생성시 단일선택

- 리스트참조변수.add("속성"): 목록에 값 추가


5) Label

- 텍스트를 표시하는 컴포넌트

- 생성자: Label(String text, int alignment) // 텍스트, 정렬방식(정렬방식 미선택 가능)

- 라벨참조변수.setBounds(int, int, int, int) // 가로위치, 세로위치, 가로크기, 세로크기


6) Checkbox

- 선택여부를 표현하는 컴포넌트

- 생성자: Checkbox(String text, boolean state) // 텍스트, 생성시 체크 여부(미선택 가능)

- Checkboxgroup으로 생성시 그룹 내 체크박스 중 하나만 선택 가능

- 생성자: Checkboxgroup(String text, CheckboxGroup group, boolean state) // Checkbox 생성자에서 그룹명 추가됨


7) TextField

- 사용자로부터 데이터를 입력받을 수 있는 컴포넌트

- 한 줄만 입력 가능

- 생성자: TextField(String text, int col) // 보여질 텍스트, 입력받을 글자 수(크기)


8) TextArea

- 여러 줄의 텍스트를 입력하거나 보여줄 수 있는 입력가능한 컴포넌트

- 생성자: TextArea(String text, int row, int col, int scrollbar) // 보여질 텍스트, 행, 열, 스크롤바 사용 여부(행렬만 선택 가능)

- TextArea참조변수.selectAll(): 텍스트 전체 선택


9) Scrollbar

- 정해진 범위 내에서 값 조절이 가능한 컴포넌트

- 생성자: Scrollbar(int orientation, int value, int visible, int min, int max) // 스크롤바 종류, 초기값, 스크롤버튼 크기, 최소값, 최대값


10) Canvas

- 그림을 그리거나 이미지를 위한 공간으로 사용되는 컴포넌트

- 생성자: Canvas(GraphicsConfiguration config) // 대상 객체 지정(미선택 가능)

- 캔버스참조변수.setBackground(Color.색) // 캔버스 배경색 변경

- 캔버스참조변수.setBounds(int, int, int, int) // 가로위치, 세로위치, 가로크기, 세로크기


11) Panel

- 빈 평면 공간만 가진 종속적 컨테이너

- Panel 안에 Panel을 삽입 가능(컴포넌트의 다양한 배치에 유용)

- 생성자: Panel(LayoutManager layout) // 레이아웃(미선택 가능)

- setSize, setLocation, setBackground 사용


12) ScrollPane

- 화면이 작아지면 나타나는 스크롤 바(제한된 공간에서 큰 컴포넌트를 보여줄 때 사용)

- 단 하나의 컴포넌트만 포함 가능한 종속적 컨테이너

- 생성자: ScrollPane(int scrollbarDisplayPolicy) // 스크롤바 표시 여부(미선택 가능)


13) Dialog

- Frame과 같은 독립적 컨테이너, 닫기버튼을 가지고 있음(알림창, 입력 받을 때 사용)

- 생성자: Dialog(Frame parent, String title, Boolean modal) // 부모 프레임 지정, 타이틀 명, 필수 응답 여부 지정

- setSize, setLocation, setBackground, setLayout 사용


14) FileDialog

- 파일을 열거나 저장할때 사용하는 Dialog

- 생성자: FileDialog(Frame parent, String title, int mode) // 부모 프레임 지정, 타이틀명, Save or Load 지정

- setFile, setDirectory, getFile, getDirectory 사용


15) Font

- Component 클래스의 setFont(Font f)를 사용해서 폰트 변경

- 생성자: Font(String name, int style, int size) // 폰트명, 폰트 스타일(볼드 이탤릭 등), 크기

ex) Font f = new Font("Serif", Font.BOLD, 20)

컴포넌트참조변수명.setFont(f) <- f에 저장된 폰트 적용 가능


16) Color

- 색 표현에 사용되는 클래스(미리 정의된 색 혹은 RGB값 사용 가능)

- 생성자: Color(int r, int r, int g, int b) // 불투명도, 0~255 사이의 rgb값, float으로도 가능

*기본적인 색은 Color.컬러명으로 사용


3. 메뉴 만들기


1) 메뉴

- MenuBar에는 Menu만 포함 가능

- Menu에는 Menu와 MenuItem 포함 가능(Menu 포함시 계층형 Menu 생성)

- 생성자: Menubar(), Menu("메뉴명"), MenuItem("메뉴아이템명")

- 참조변수.add(하위참조변수)로 추가


2) PopupMenu

- 윈도우(Frame)내에서 오른쪽 마우스를 클릭하면 나타나는 메뉴

- 부모프레임에 추가시켜서 사용

- 생성자: PopupMenu(String label) // 라벨(나타나지 않음)

- 팝업메뉴참조변수.add(메뉴아이템참조변수)로 추가 (속성은 MenuItem으로 생성)


4. 레이아웃 매니저

1) 레이아웃 매니저를 이용해서 컴포넌트 배치

- 컨테이너에 포함된 컴포넌트의 배치를 자동관리

- 종류: BorderLayout, FlowLayout, GridLayout, CardLayout, GridbagLayout

- 기본형: FlowLayout(Panel, Applet), BorderLayout(Window, Dialog, Frame)


2) BorderLayout

- 5개의 영역으로 분리(각 영역당 컴포넌트 1개 삽입 가능, Panel 사용하면 여러개 가능)

- 생성자: BorderLayout(int hgap, int vgap) // 좌우 간격, 상하 간격(미선택 가능)


3) FlowLayout

- 워드프로세서와 같이 맞춤 정렬 가능(좌, 중간, 우)

- 생성자: FlowLayout(int align, int hgap, int vgap) // 정렬방법, 좌우 간격, 상하 간격

*기본생성자 선택시 가운데 정렬, 상하좌우 5픽셀


4) GridLayout

- 컴포넌트를 임의의 행렬로 배치

- 생성자: GridLayout(int row, int col, int hgap, int vgap) // 행, 열, 좌우 간격, 상하 간격


5) CardLayout

- 여러 컨테이너를 슬라이드처럼 표시(앨범 혹은 퀴즈 프로그램에 사용)

- 생성자: CardLayout(int hgap, int vgap) 좌우 간격, 상하 간격

5. 이벤트 처리(Event Handling)

1) 이벤트

- 사용자 혹은 프로그램에 의해 발생할 수 있는 하나의 사건

- 이벤트소스(Event Source, 이벤트 발생지): 이벤트가 발생한 컴포넌트

- 이벤트핸들러(Event Handler, 이벤트 처리기): 이벤트 발생시 실행될 코드를 구현

- 이벤트리스너(Event Listener, 이벤트 감지기): 이벤트를 감지하고 처리


2) 이벤트 처리(Event Handling)

- 이벤트 발생시 어떠한 작업이 수행되도록 코드를 작성

- 클래스 작성 예시

class EventHandler implements 해당인터페이스 {

public void 해당메소드(해당이벤트명 매개변수) { /* 코드작성 */ }

}


class Main {

public static void main(String args[]) {

Frame f = new Frame("프레임명") // 기본 프레임 선언

f.add해당이벤트 (new EventHandler()); // EventHandler클래스를 프레임의 이벤트로 등록

}

}

이벤트

인터페이스

메소드

ActionEvent

ActionListener

actionPeformed(ActonEvent ae)

ComponentEvent

ComponentListener

componentMoved(ActonEvent ae)

componentHidden(ActonEvent ae)

componentResized(ActonEvent ae)

componentShown(ActonEvent ae)

MouseEvent

MouseMotionListener m

r mouseDragged(MouseEvent me)

mouseMoved(MouseEvent me)

mousePressed(MouseEvent me)

mouseReleased(MouseEvent me)

mouseEntered(MouseEvent me)

mouseExited(MouseEvent me)

mouseClicked(MouseEvent me)

MouseWheelEvent

MouseWheelListener

mouseWheelMoved(MouseWheelEvent e)

KeyEvent

KeyListener

keyPressed(KeyEvent ke)

keyReleased(KeyEvent ke)

keyTyped(KeyEvent ke)

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)

WindowFocusListener

windowGainedFocus(WindowEvent e)

windowLostFocus(WindowEvent e)

WindowStateListener

windowStateChanged(WindowEvent e)

ContainerEvent

ContainerListener

componentAdded(ContainerEvent ce)

componentRemoved(ContainerEvent ce)

3) ActionEvent

- 컴포넌트에 정의된 특정 동작 수행시 발생하는 이벤트

ex) Button을 누르면 MouseEvent, KeyEvent, ActionEvent 동시발생

-> 중복 제거를 위해 ActionEvent에서만 처리

- ActionEvent가 발생하는 경우: Button, Menu클릭, TextField에서 엔터, List 아이템 더블클릭


4) Adapter 클래스

- Listener인터페이스를 내용없이 구현한 클래스

- 목적: Listener인터페이스를 implements하면 사용하지 않는 메소드까지 전부 오버라이딩을 해야하지만 Adapter 클래스를 상속받으면 필요한 메소드만 오버라이딩 할 수 있다.

- Adapter클래스의 종류: ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter, WindowAdapter


6. 그래픽


1) paint()와 Graphics

- Component클래스의 paint()는 컴포넌트에 그림을 그리기 위한 것

- paint() 오버라이딩을 통해 컴포넌트에 그림을 그릴 수 있다.

- getGraphics(): 컴포넌트에서 그래픽 객체 얻음(모든 컴포넌트에서는 Graphics객체 존재)

- Graphics클래스는 그림을 위한 다양한 메소드 제공


2) AWT쓰레드와 repaint()

- AWT쓰레드가 paint()를 자동호출해서 화면을 갱신하는 경우

=>처음 화면에 나타날 때, 다른 화면에 가려졌던 부분이 다시 나타날 때, 아이콘화->최대화

- repaint(): AWT쓰레드에 화면 갱신 요청

- update(Graphics g): 화면을 지우고 paint(Graphics g) 호출

- 순서: AWT쓰레드에 화면갱신 요청 -> AWT쓰레드는 update() 호출 -> update()는 화면을 지운 후 paint() 호출

- 더블버퍼링: 가상화면에 그린 후 복사하는 과정

*순서: 가상이미지생성 -> 그래픽스 얻어오기 -> 그리기 -> 복사

7. 애플릿(Applet)


1) 애플릿이란?

- 웹브라우저를 통해 실행될 수 있는 작은 어플리케이션

- 애플릿 관련 정보가 포함된 HTML문서 작성해야 함

- java.exe가 아닌 웹브라우저를 통해 실행

- 메인 메소드 불필요

- 애플릿은 java.applet.Applet을 상속하는 public클래스여야 함


2) 애플릿의 생명주기

- 웹브라우저가 애플릿이 포함된 HTML문서를 읽고 애플릿을 다운받으면 애플릿 인스턴스 생성, 애플릿초기화(init() 호출) 후 실행(start() 호출)


3) 애플릿의 보안제약

- 애플릿은 외부로부터 다운받는 프로그램이라 잠재적 위험요소 존재

- 사용자 컴퓨터 보호를 위한 제약: 실행파일 실행, 사용자의 파일 읽기 혹은 쓰기, 사용자 컴퓨터의 정보 읽기, 애플릿을 제공한 서버가 아닌 컴퓨터에서 소켓 열기, 네이티브 메소드 호출