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) 애플릿의 보안제약
- 애플릿은 외부로부터 다운받는 프로그램이라 잠재적 위험요소 존재
- 사용자 컴퓨터 보호를 위한 제약: 실행파일 실행, 사용자의 파일 읽기 혹은 쓰기, 사용자 컴퓨터의 정보 읽기, 애플릿을 제공한 서버가 아닌 컴퓨터에서 소켓 열기, 네이티브 메소드 호출
'프로그래밍 > Java' 카테고리의 다른 글
[JavaScript 요약 정리] 17. 쿠키와 저장소 (0) | 2018.12.31 |
---|---|
[JavaScript 요약 정리] 14. 이벤트(Event) (0) | 2018.12.31 |
[Java 요약 정리] 12. 입출력(I/O) (0) | 2018.12.28 |
[Java 요약 정리] 11. 스트림(Stream) (0) | 2018.12.27 |
[Java 요약 정리] 10. 람다식(Lambda Expression) (0) | 2018.12.27 |