Purple Bobblehead Bunny

Backend/JAVA

[JAVA] GUI 이벤트 구동 프로그래밍

준영어린이 2022. 3. 4. 16:17

 

Event-driven programming

 

• 버튼 클릭과 같은 특정 이벤트가 발생하면 적절한 처리를 해주는 프로그래밍 방식

 

이벤트 처리 절차

                     감시중 > 버튼 클릭 > 이벤트 발생 > 코드 실행

 

이벤트 리스너 (Event listener)

 

• 이벤트가 발생하면 이벤트 객체가 생성

• 이벤트 리스너 : 발생된 이벤트 객체에 반응 해 이벤트를 처리하는 객체

• 이벤트 소스에 리스너를 등록하면 이벤트가 발생 했을 때, 이벤트 리스너 내부의 처리 메소드가 호출 된다.

 

이벤트 리스너 작성 

1. 이벤트 리스너 클래스 작성

 

• 리스너 작성 --> interface로 제공 된다.

• 이벤트 리스너를 작성하기 위해선, 해당 인터페이스 내부의 추상 메소드를 구현해야 한다.

• 이벤트의 종류에 따라 다양한 리스너 인터페이스를 제공하기 때문에 이벤트에 맞는 인터페이스를 구현해야 한다.

 

interface ActionListener{

      public void actionPerformed(ActionEvent e);

}

 

2. 이벤트 리스너를 컴포넌트에 등록

각 컴포넌트는 이벤트 리스너를 등록할 수 있는 메소드를 제공한다.

 

 

1. 리스너를 독립적인 클래스로 작성

• 리스너를 등록하는 가장 기본적인 방법

 

Line8  e.getSource(); -> 이벤트 발생 시 해당되는 컴포넌트의 변수를 불러온다.

 

2. 리스너 클래스를 내부 클래스로 작성

• 내부 클래스는 외부 클래스의 멤버 변수들을 자유롭게 사용 가능하다.

Line 6,7 -> 생성자와 actionPerformed() 메소드(Line25)에서 사용하기 때문에 멤버 변수로 설정

Line 22 -> MyListener 클래스는 MyFrame의 JAVA1의 내부 클래스로 설정하여 JAVA1의 멤버 변수에 접근할 수

              있도록 만든다.

 

컴포넌트의 문자열 처리 방법

컴포넌트.getText();      // 컴포넌트에 입력되어 있는 문자열 가져오기

컴포넌트.setText();      // 컴포넌트에 문자열 출력하기

 

 

 

3. 클래스가 JFrame을 상속 받으면서 동시에 리스너 인터페이스를 구현

 

하나의 클래스 안에서 모든 작업이 가능

 

스윙 컴포넌트 이벤트

• 스윙 컴포넌트가 발생하는 이벤트는 모든 컴포넌트가 공통적으로 지원하는 저수준 이벤트와

  일부 컴포넌트만 지원하는 의미적 이벤트로 나뉜다.

 

저수준 이벤트 (low-level event)

 

 이벤트 종류 발생 상황
Component 컴포넌트의 크기나 위치가 변경되었을 경우
Focus 키보드 입력을 받을 수 있는 상태가 되었을 때나 반대의 상황의 경우
Container 컴포넌트가 컨테이너에 추가되거나 삭제될 경우
Key 사용자가 키를 눌렀을 때 키보드 포커스를 가지고 있는 객체에서 발생
Mouse 마우스 버튼이 클릭 되었을 때, 혹은 마우스가 객체의 영역으로 들어오거나 나갈 경우
MouseMotion 마우스가 움직였을 경우
Window 윈도우에 어떤 변화가 있을 경우 (닫힘, 열림, 아이콘화 등)

 

액션 이벤트 (Action Event) - 배경색 변경

 

사용자가 버튼을 클릭하는 경우

사용자가 메뉴 항목을 선택하는 경우

사용자가 텍스트 필드에서 엔터키를 누르는 경우

 

Line 27 ~ 31 의 if문을 통해서 노란색을 클릭하면 yellow color가 뜨고,

핑크색을 클릭하면 pink color 가 뜬다..

 

 

'Backend > JAVA' 카테고리의 다른 글

[JAVA] LinkedList  (0) 2022.03.07
[JAVA] ArrayList  (0) 2022.03.04
[JAVA] Generic  (0) 2022.03.04
[JAVA] 배치 관리자(Layout manager)  (0) 2022.03.02
[JAVA] Java Swing  (0) 2022.03.02