[Java] GUI 이벤트란 무엇인가?

▶이벤트란? 

이벤트(Event)라는 것은 윈도우 프로그래밍에서 어떤 특정한 행동이 발생한 그 자체를 의미합니다. 예를 들어 메뉴를 선택했다는가, 아니면 마우스를 클릭하거나, 윈도우의 크기를 조절하거나 등의 행위를 뜻하는 것입니다. 이런한 방식의 프로그래밍을 이벤트 중심의 프로그래밍이라고 하는데 윈도우 프로그래밍에서 중요한 개념 중에 하나입니다.



이벤트 소스(Event Source)는 이벤트가 발생할 수 있는 대상을 의미하고 그 대상으로부터 이벤트가 발생하면 발생된 이벤트를 처리해서 결과를 낼 수 있도록 해주는 것을 이벤트 핸들러(Event Handler)라고 합니다.


자바에서의 이벤트 처리

1. 프로그램이 실행중에 운영체제(OS)가 해당 프로그램에서 이벤트가 발생이 되는지를 검사한다.  

2. 이때 이벤트가 발생되면 운영체제가 JVM에게 이벤트를 전달하고 JVM은 발생된 이벤트를 처리하기 위하여 이벤트 객체를 생성한다.  

3. 그런후 이벤트를 처리하기 위하여 이벤트 객체를 가지고 핸들러를 호출한다.

자바 이벤트 3대속성

1. 이벤트 소스(Event Source)

이벤트 소스는 이벤트가 발생되는 컴포넌트를 말한다.  즉, 버튼, 체크박스, 리스트, 프레임, 마우스 등과 같은 컴포넌트들이 이벤트 소스이다. 


2. 이벤트 리스너(Event Listener)  

이벤트 소스에서 이벤트가 발생하는지를 검사하고 있다가 이벤트가 발생이 되면 실제적으로 이벤트를 처리할 수 있도록 만든 인터페이스이다.  


3. 이벤트 핸들러(Event Handler) 

이벤트 리스너에 전달된 이벤트를 실제로 처리할 수 있도록 이벤트 리스너에 포함되어있는 메서드로 발생된 이벤트 객체를 받아와서 실제적으로 처리해주는 기능을 가지고 있다.  



▶이벤트 클래스의 구조 

모든 이벤트 클래스는 java.util.EventObject 클래스로부터 상속을 받고있으며 이 클래스에는 이벤트를 발생시킨 객체를 알려주는 getSource() 메서드가 존재한다.  이 메서드는 여러 이벤트가 발생할 때 이벤트를 발생시키는 객체를 구별할 목적으로 사용한다. 



이벤트의 종류 및 설명

 이벤

설명 

ActionEvent 

버튼, 리스트, 메뉴 등의 컴포넌트가 눌리거나 선택이 되었을 때 발생하는 이벤트 

AdjustmentEvent

스크롤바와 같은 조정 가능한 컴포넌트에서 조정이 일어나면 발생하는 이벤트

ComponentEvent

컴포넌트의 모습이나 이동, 크기가 변화될 때 발생하는 이벤트 

ItemEvent

리스트와 같은 선택항목이 있는 컴포넌트에서 선택항목이 선택될 때 발생되는 이벤트 

TextEvent

텍스트 컴포넌트에서 값이 입력될 때 발생하는 이벤트

ContainerEvent

컨테이너에 컴포넌트가 추가되거나 제거될 때 발생하는 이벤트

FocusEvent

컴포넌트에 초점(Focus)이 들어 올 때 발생하는 이벤트 

PaintEvent

컴포넌트가 그려져야할 때 발생하는 이벤트  

WindowEvent

윈도우가 활성화되거나 비활성화 될 때, 최소, 최대, 종료 될 때 발생하는 이벤트 

KeyEvent

키보드로부터 입력이 될 때 발생하는 이벤트

MouseEvent

마우스가 눌려지거나 움직일 때, 마우스 커서가 컴포넌트 영역에 들어가거나 벗어날 때 발생하는 이벤트 



컴포넌트별 이벤트 종류



컴포넌트 이벤트 처리 3단계

1. 이벤트 소스 결정

하나의 윈도우에는 여러 개의 컴포넌트가 존재할 수 있으므로 실제로 이벤트가 발생되면 처리할 컴포넌트를 결정한다.  

 

2. 이벤트 리스너 작성

이벤트를 실제적으로 처리할 수 있도록 해당 이벤트를 처리 할 이벤트 리스너 인터페이스를 이용해서 이벤트 리스너 클래스를 작성한다.  

 

3. 이벤트 소스와 이벤트 리스너 연결

이벤트 리스너가 작성이되면 리스너와 이벤 트 소스와 연결을 하여 이벤트 소스에서 실제적으로 이벤트가 발생이 되면 처리할 수 있도록 addXXXXListener()함수를 통해 연결을 시켜준다.  XXXX부분은 해당 컴포넌트에 붙일 수 있는 리스너 이름을 의미한다.  예를 들어 버튼에 ActionEvent을 처리하기 위하여 버튼에다가 addActionListener를 붙이는 경우이다. 



▶컴포넌트 어댑터 클래스 

리스너가 인터페이스로 되어 있어 리스너에 선언되어 있는 추상메서드를 모두  버라이드를 시켜야 사용이 가능합니다. 즉, 처리하지 않는 메서드까지도 오버라이드하여 처리를 해야하니 굉장히 번거로운 작업이라고 생각할 것이다. 그 래서 API에는 이러한 작업을 좀 더 쉽게 처리할 수 있도록 Adapter라는 클래스 가 존재한다. 

 

Adapter 클래스는 이벤트 리스너 인터페이스들 중에서 추상메서드가 2개이상 존재하는 인터페이스를 구현한 추상 클래스이다. 인터페이스에 있는 모든 메서드를 빈(Empty) 메서드로 재정의 하였기 때문에 인 터페이스를 구현하여 불필요한 메서드를 재정의하는 수고를 덜어준다.  Adapter 클래스를 상속받은 클래스에서는 자신이 필요한 메서드만을 재정의 하면 된다.  


어뎁터 클래스의 종류



[Java] 그래픽 GUI AWT 사용법

[Java] Swing 특징 및 구조 & 사용법 총정리

[Java] Swing으로 만드는 미니언 성적관리프로그램 예제


댓글(0)

Designed by JB FACTORY