- 이벤트를 처리하기 위한 xxxListener가 하나 이상의 abstract method를 가지고 있을 때, 이 인터페이스 및 속해 있는 abstract method를 미리 구현(Override)해놓은 추상 클래스
- 개발자는 xxxAdapterClass를 상속받고 필요한 method만 구현하여 사용하면 됨
(단, 단일 상속의 문제가 있음)
- xxxAdapter를 사용하면 has a 관계(=포함 Object 관계)의 이벤트 처리를 구현함
>> 장점 : 디자인 클래스와 이벤트 처리 클래스를 분리하여 제작하고 처리할 수 있음
** 다른 객체의 기능을 사용하기 위해 해당 객체를 입력받아, 입력받은 객체명으로 기능을 사용하는 것
>> is a OR has a 관계
>> 장점 : 코드의 복잡도가 낮아진다!!!
# 오늘의 코딩 #
- Addapter Class 를 알아보자!
public class UseAdapterEvent extends KeyAdapter {
...
public void keyPressed(KeyEvent ke) {
//이벤트가 발생했을 때 사용자에게 keyCode를 보여주는 제공할 코드
int keyCode = ke.getKeyCode();
JTextArea jta = ud.getJtaNameView();
jta.append(String.valueOf(keyCode));
jta.append("\n");
}//keyPressed
}//class
- kyeEvent를 해보려고 사부작거린 code를 가져와봤다.
자바 API 중 KeyAdapter Class
- KeyAdapter Class는 미리 KeyListener Interface를 구현해놓았기 때문에
KeyAdapter Class를 상속하면, method 중 하나를 선택해서 Override 가능하다!!!
- 일반 컴포넌트를 Container Component나 Window Component에 배치하기 위해 제공하는 Class
- Container Component와 Window Component에서 적용할 수 있음
- 자동배치 관리자와 수동배치 관리자 두 가지를 사용할 수 있음
- setLayout method로 배치관리자를 적용함
자동배치 관리자
- 컴포넌트가 배치되는 크기와 위치가 결정되어 있는 관리자
- BorderLayout, FlowLayout, GridLayout, GridBagLayout, CardLayout 라는 Class 들이 제공됨
(java.awt package)
- Non Visual Component : 사용자에게 컴포넌트 자체가 보이지 않음
1) BorderLayout (경계 레이아웃) - Window Component (Window, Frame)의 기본 레이아웃 - 하나의 영역에 하나의 컴포넌트만 배치됨 (Center, 동서남북) - 컴포넌트의 고유 크기가 무시되고, 배치되는 위치에 맞게 수정됨 > Window의 크기를 변경하면 컴포넌트의 크기가 동일하게 늘어나거나 줄어듦 - 설정) setLayout (new BorderLayout() ); // 생략가능 - 컴포넌트 배치 문법) add(“배치할 위치”, 컴포넌트); add(컴포넌트, 배치할 위치 상수); // 배치 위치를 설정하지 않으면 center에 들어감 2) FlowLayout (흐름 레이아웃) - Container Component(Panel, ScrollPane)의 기본 레이아웃 - 윈도우의 크기가 줄어들면 컴포넌트의 위치가 위->아래로 변화됨(늘어나면 반대) - 배치되는 컴포넌트의 크기는 고유크기를 가지고 배치됨 - 설정) setLayout(new FlowLayout()); - 컴포넌트 배치 문법) add(컴포넌트); // add하는 순서대로 배치됨 3) GridLayout (격자 레이아웃) - 행과 열로 구분된 레이아웃 - 모든 행의 컴포넌트의 크기가 동일하게 설정되는 레이아웃 - 하나의 영역에는 하나의 컴포넌트가 배치됨 - 배치되는 컴포넌트의 크기는 고유크기가 무시되고 영역에 맞게 확장됨 - 설정) setLayout(new GridLayout(행,열)); - 컴포넌트 배치 문법) add(컴포넌트); // add하는 순서대로 왼->오른쪽으로 배치됨
4) GridBagLayout - 행과 열로 구성된 레이아웃 - 행마다 열의 개수와 높이가 다름
5) CardLayout - Container Component (Panel)에만 적용되는 레이아웃 (Window에서 적용 불가) - 여러 개의 Panel중 사용자에게 하나의 Panel만 제공하는 레이아웃 - 한정적인 공간에 다양한 레이아웃을 보여줄 때 사용
# 오늘의 코딩 #
- Layout을 활용해서 휴대폰 전화 키패드를 찍어보자! ** java.awt.Font Class 를 활용하면 font 변경 가능! (style 및 size 포함) **
package test;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* GridLayout Class 활용
* @author user
*/
// Window Component 상속
@SuppressWarnings("serial")
public class UseGridLayout extends JFrame {
public UseGridLayout() {
super("연습");
// 컴포넌트 생성
String[] data = "1,2,3,4,5,6,7,8,9,*,0,#".split(",");
JButton[] jbtArr = new JButton[data.length];
// 배치관리자 변경
setLayout(new GridLayout(4, 3));
//font 설정
Font font = new Font("맑은 고딕",Font.BOLD,30);
//버튼 배열에 숫자와 특수기호를 배치 및 폰트 적용하는 for문
for (int i = 0; i < data.length; i++) {
jbtArr[i] = new JButton(data[i]);
add(jbtArr[i]);
jbtArr[i].setFont(font);
} // end for
// 윈도우 크기 설정
setSize(500, 400);
// 가시화
setVisible(true);
// 윈도우 종료 이벤트 처리
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}// UseGridLayout
public static void main(String[] args) {
new UseGridLayout();
}// main
}// class