이벤트는 사용자의 입력또는 센서, 다른 응용프로그램으로 오는 메시지등이 발생(트리거) 하는 것
이벤트의 발생에 의해 프로그램 흐름이 결정
이벤트 프로그램 = 이벤트 리스너들의 집합
1) 이벤트 발생
2) 이벤트 객체 생성
3) 이벤트 리스너 탐색
4) 이벤트 리스너 호출
5) 이벤트 리스너 실행
이벤트 소스: 이벤트를 발생 시킨 GUI component ( JButton )
이벤트 객체: 발생한 이벤트에 대한 정보
이벤트 리스너: 이벤트를 처리하는 코드, 컴포넌트에등로 되어야 작동
이벤트 분배 스레드: 동작/ JVM에서 이벤트 발생을 통지 받는다, 이벤트 소스와 이벤트 종류 결정, 이벤트 객체 생성
이벤트 리스너 한테 전달되는 이벤트에 대한 정보를 가지고 있는 객체
이벤트 발생상황 파악

이벤트 객체 포함 정보 :
Action Event: 액션 문자열
Mouse Event: 마우스 위치, 마우스 버트, 눌러진 키
Item Event : 체크 상태

이벤트를 처리하는 코드
JDK에 이벤트 리스너 작성을 위한 인터페이스 제공
interface ActionListener{
public void actionPerformed( ActionEvent e );}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// 버튼 클릭 시 호출되는 메소드
JButton b = (JButton)e.getSource();
// 클릭된 버튼 알아내기
if(b.getText().equals("Action"))
// 버튼의 문자열이 “Action”인지 비교
b.setText("액션"); else
b.setText("Action"); }} 3. 이벤트 리스너 등록
```java
MyActionListener listener = new MyActionListener(); // 리스너 객체 생성
btn.addActionListener(listener); // 리스너 등록
컴포넌트는 다른 이벤트에 대한 리스너를 동시에 가질수있다
컴포넌트는 한이벤트에 대해 여러개의 리스너를 동시에 가질수있다
독립적 클래스로 작성 가능
a.여러곳에 사용할때 적합
내부 클래스에서 작성
a.클래스 안에 멤버처럼 작성
b.이벤트 리스너를 특정 클래스에서만 사용할때
익명 클래스 로 작성 가능
a. 이름없이 리스너만 작성
b. 리스너 코드가 간단할때
(클래스 정의 + 인스턴스 생성)을 한번에 작성
implements를 사용안하고, new 생성자로 인스턴스 바로 생성

이벤트 리스너 작성시 모든 추상 메소드 구현이 부담
클래스를 만들어 사용하는 메소드 구현하고 나머지는 단순 리턴하게 하면됨.

키를 누르는 순간
누르는 키를 떼는 순간
포커스를 받은 컴포넌트에 사용 가능
keypressed
keyrelease
keytyped
component.keylistener();
컴포넌트 키 이벤트 독점하는 권한
component.setFocusable(true);//포커스 받을수있게 설정
component.requestFocus(); //포커스 강제 지정
유니코드
전세계의 문제에 대한 코드 체계
문자, a ,b,1,3,$
keypressed() -> keyTyped() -> keyReleassed()
NON-유니코드
제어키: F5 Alt , ctrl, ESC , Home
정의된 유니코드값 없음
키마다 각각의 가상코드로 사용
keypressed() -> keyReleased()
가상 키
유니코드가 아닌 모든키 는 자바의 가상코드가 정의됨
문자 유니코드
char KeyEvent.getKeyChar(); 'a'
가상 키 값
int KeyEvent.getKeyCode(); VK_F5
키 이름 문자열 리턴
String KeyEvent.getkeyText(int keycode)// Shift = "Shift"