Download presentation
Presentation is loading. Please wait.
1
JAVA WINDOW PROGRAMMING
1st week 2st session 이수연 in Proj.t Narsha
2
JAVA AWT? Contents Container (컨테이너) Component (컴포넌트)
자바에서는 윈도우 프로그램을 만들 수 있는 API를 제공한다. 이 API가 모여있는 패키지가 java.awt.*; 패키지이다. Contents Container (컨테이너) Component (컴포넌트) Layout Manager (레이아웃 관리자의 개요 및 종류) Event (이벤트의 개요 및 종류) Listner and Event (리스너와 이벤트) Handling Events (이벤트의 종류별 처리)
3
3. Layout Manager 컴포넌트 배치 관리자 : 컨테이너 안의 GUI 컴포 넌트들을 정리하여 배치하는 일을 한다. 기본적인 배치 기능을 제공하여 사용자가 GUI 컴포넌트들의 위치를 일일이 제어하지 않아도 된다 각 배치관리자에 대한 클래스는 LayoutManager 인터 페이스를 구현한다 (implements LayoutManager) java.awt에 일반적인 배치관리자 클래스들이, javax.swing에 BoxLayout과 Box 클래스가 정의되어 있 음
4
3. Layout Manager 1) FlowLayout Manager
가장 기본적인 배치 관리자, 컴포넌트를 행 단위로 배치시키며 행이 가득 차면 다음 행을 채운다. 행에서의 기본 위치는 가운데, 컴포넌트 사이의 기본 간격은 5px FlowLayout의 인스턴스를 생성할 때에 인자를 전달함으로서 기본 정렬 방향(왼쪽, 가운데, 오른쪽) 과 컴포넌트 사이의 간격 을 조정할 수 있다. FlowLayout(RIGHT); // default 설정방향 전달 FlowLayout(FlowLayout.RIGHT, 10, 20); // default 설정방향, 컴포넌트 사이 간격 10px, 행간 간격 20px
5
3. Layout Manager 1) FlowLayout 예제
6
2) BorderLayout Manager
컴포넌트를 컨테이너에 5개의 영역 (NORTH, SOUTH, EAST, WEST, CENTER)에 컴포넌트를 배치하기 위한 것 디폴트로 설정된 간격은 0px BorderLayout Manager를 사용할 경우 컴포넌트가 배치될 영역 을 지정하지 않으면 요소들이 나타나지 않게 된다. 이미 다른 컴포넌트가 있는 자리에 또 추가하면, 가장 최근에 추가된 컴포넌트만 나타나게 된다 BorderLayout(); // 컴포넌트간 간격이 0px BorderLayout(10, 20); // 수평간격 10px, 수직간격 20px
7
3. Layout Manager 2) BorderLayout 예제
8
2) FlowLayout과 BorderLayout – 각 패널에서 서로 다른 레이아웃 관리자 적용
9
3. Layout Manager 3) GridLayoutManager GridLayout();
컴포넌트를 컨테이너 내의 직사각형 격자에 배열한다. (격자 = 바둑판) 디폴트로 설정된 간격은 0px GridLayout(); // 컴포넌트간 간격 없이 한 행에 배열, 간격은 0px GridLayout(int 행수, int 열수); // 행 X 열 개수의 관리자 생성, 간격은 0px GridLayout(int 행수, int 열수, int 수평간격, int 수직간격); // 행 X 열 개수의 관리자, 간격 설정
10
3. Layout Manager 3) GridLayout 예제
11
3. Layout Manager 4) BoxLayoutManager
컴포넌트를 한 행 또는 한 열로 배열한다 javax.swing.BoxLayout 클래스를 import 해줘야 함. 행 또는 열이 컴포넌트로 가득 차더라도 다음 행이나 다음 열로 넘어가지 않고, 컴포넌트의 크기를 줄이거나 잘라버려 한 행이 나 한 열을 유지 BoxLayout(Component 컨테이너, int 구분상수) 첫 번째 인수는 컨테이너로서 Frame, Panel, Dialog를 취함 두 번째 인수는 상수로서, 행 배열인 경우 BoxLayout.X_AXIS 열 배열인 경우 BoxLayout.Y_AXIS
12
3. Layout Manager 4) BoxLayout 예제
13
3. Layout Manager 1-2. Practice 01 다음과 같은 화면을 구성해 보세요.
14
1-2. Practice 01 Guideline 3. Layout Manager
프레임 안에 두 개의 패널이 들어가 있는 형태입니다. 프레임의 레이아웃 관리자 : BorderLayout frm.setLayout(new BorderLayout()); … frm.add(panel1); frm.add(panel2); panel.setLayout(new FlowLayout()); … 프레임의 SOUTH에 들어가는 패널의 레이아웃 관리자 : FlowLayout, 가운데 정렬, 여백은 10px, 20px 프레임의 WEST에 들어가는 패널의 레이아웃 관리자 : BoxLayout, 열 정렬, 첫 인자에 해당 패널을 전달해야 합니다.
15
4. Event 이벤트: 프로그램이 반응하거나 프로그램의 태스크에 영향을 미 치도록 하는 시스템 혹은 사용자의 동작 또는 일(사건)의 발생. 마 우스 버튼 클릭, 마우스 이동, 입출력 동작 등의 완료 등이 있다. 이벤트 청취자 (Event listener) : 이벤트의 발생에 따른 적절 한 처리를 담당하는 모듈. 발생한 이벤트를 수용하는 개체. 이벤트 의 종류에 따라 달리 정의되며, 자바가 인터페이스로 제공 이벤트 소스 : 사용자 혹은 시스템 이벤트를 발생시킨 진원지.
16
4. Event 1) Event의 종류 각 Event는 클래스 형태 로서 정의되며, 해당되는 이벤트가 발생 할 때 인스턴스 형태로 해당 리스너에 전달된다. ActionEvent : 버튼을 비롯한 몇 가지 컴포넌트에 대해 사용자가 의미있는 행동을 하려는 경우 발생 AdjustmentEvent : 스크롤바 컴포넌트에서 스크롤 값이 변하는 경우 발생 ComponentEvent : 컴포넌트의 크기, 위치 등에 변화가 있는 경 우 발생 FocusEvent : 컴포넌트가 키보드에 입력할 수 있는 포커스를 갖 거나 잃을 경우 발생(커서 깜박임)
17
4. Event 1) Event의 종류 - continued
ContainerEvent : 컨테이너에 컴포넌트가 추가되거나 삭제되는 경우 ItemEvent : 리스트나 체크박스와 같은 컴포넌트에서 항목을 선택하는 경우 발생 KeyEvent : 키보드를 통해 키를 입력하는 경우 발생 MouseEvent : 컴포넌트 위에서 마우스를 클릭하거나, 컴포넌트 영역 안으로 마우스 커서가 들어가거나 나올 때 발생 MouseMotionEvent : 컴포넌트 위에서 마우스를 이동하거나 드래그하 면 발생 TextEvent : 텍스트영역, 텍스트필드 컴포넌트에서 텍스트의 값이 변경 될 떄 발생 WindowEvent : 윈도우가 생성되어 상태가 변하거나 제거될 때 발생
18
4. Event 2) Component와 Event 각 컴포넌트마다 일어날 수 있는 이벤트에 한계가 있다.
각 컴포넌트가 가질 수 있는 이벤트의 종류를 나타낸 표 (하단)
19
4. Event 3) Listener Interface
리스너 : 11가지의 각 이벤트의 종류에 대해 발생한 이벤트를 받 아 처리하는데 필요한 변수와 메소드를 갖는 인터페이스를 리스 너라고 함 리스너의 이름은 이벤트 이름 + Listener이다. 예를 들어, ActionEvent의 리스너 인터페이스 : Action + Listener = ActionListener
20
4. Event 3) 클릭한 버튼의 이름을 출력하는 프로그램
21
4. Event 3) 클릭한 버튼의 이름을 출력하는 프로그램 (2)
22
1-2. Practice 02 3. Layout Manager 다음과 같은 화면을 구성해 보세요. 다른 클래스에 정의했을 시
Frame클래스이름.버튼이름.setBackground(Color c); 버튼을 static 변수로 선언해주어야 합니다.
23
4. Event 4) Adapter Class 인터페이스를 구현하는 클래스에서는 인터페이스의 모든 메소드 를 구현해야만 한다. 여러 개의 메소드를 가진 인터페이스를 구 현할 때 구현하지 않아도 되는 기능까지 구현해야 될 상황이 필 요할 수 있으므로 불편하게 될 수 있다. 이를 개선하여 구현이 불 필요한 메소드들은 미리 공백으로 구현해놓은 클래스가 어댑터 클래스이다. 예를 들어 MouseListener 인터페이스엔 기능에 따라 5개의 메소 드가 선언되어 있다. 그 중 한 기능에 대한 메소드만 구현할 필요 가 있을 때, MouseAdapter를 상속받아 한 메소드만 구현하면 간 편할 것이다.
24
4. Event 4) Adapter Class 구현하기 (1)
리스너 인터페이스를 구현하는 대신 어댑터 클래스를 상속 받는다. (핸들링 클래스를 따로 만들어주거나, 해당 클래스가 다 른 클래스를 (Frame이라던가) 상속하지 않아야 한다)
25
4. Event 4) Adapter Class 구현하기 (2)
이미 다른 클래스를 상속받아 어댑터 클래스를 상속할 수 없는 경우, 내부 클래스를 이용한다
Similar presentations