13. GUI_Event

2021. 8. 27. 22:26· 국기훈련과정/JAVA 복습노트

Event Handler?

- 각 컴포넌트에 특정 행위를 했을 때 그 행위에 대한 작업을 처리할 수 있도록 하는 것.

- 사용자 또는 프로그램에 의해 발생할 수 있는 하나의 사건.

- 이벤트를 처리하는 자바 프로그램 코드로써 클래스를 만들게 됨. 

- 이벤트 리스너는 인터페이스를 제공하며, 인턴페이스를 구현함으로써 이벤트 리스너를 작성한다.

- 현재 발생한 이벤트에 관한 정보를 가진 객체를 의미함.

- 이벤트 처리 클래스 --> java.awt.event 패키지 안에 있는 클래스들.

- 각 컴포넌트별 이벤트처리 메서드 : addXXXXXListener()

- 이벤트 관련 클래스 ==> Listener 인터페이스, Adapter 클래스, Event 클래스

- 이벤트 리스너는 전부 인터페이스임. 이벤트 리스너는 컴포넌트에 연결되어 있어야 작동함.

- 이벤트리스너 작성 과정

1) 이벤트와 이벤트리스너 선택

2) 이벤트와 리스너 클래스 작성 : 리스너 인터페이스를 이용하여 추상메서드를 모두 구현.

3) 컴포넌트에 이벤트리스너 등록

 

[이벤트 관련 용어]

- 이벤트 소스: 이벤트를 발생시킨 gui 컴포넌트를 말함.

- 이벤트 객체 : 발생한 이벤트에 대한 정보(이벤트 종류, 이벤트 소스, 화면 좌표, 마우스 버튼의 종류, 눌려진 키 등)를                        담는 객체. 이벤트에 따라 서로 다른 정보가 저장됨.

- 이벤트 리스너: 이벤트를 처리하는 코드. 컴포넌트에 등록이 되야 작동가능. 이벤트소스와 이벤트핸들러를 연결.

                      이벤트를 처리하는 객체를 말함.

 

[Event Handler 클래스 생성 방법 4가지]

1. Listener 클래스를 구현하는 방법.

2. Adapter를 생성하는 방법.

3. Frame 클래스에 Listener를 생성. (가장 일반적)

4. 익명 클래스에 생성. (비교적 자주 사용)

 

1번 예시

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class A implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
        
    }
}
 
public class Ex26_Event extends JFrame {
    
    public Ex26_Event() {
        JPanel container = new JPanel();
        JButton jb = new JButton("종  료");
        container.add(jb);
        add(container);
        
        setBounds(200, 200, 300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        pack();
        
        A a = new A();
        
        jb.addActionListener(a);
    }    
Colored by Color Scripter
cs

ActionListener를 구현한 A라는 클래스를 먼저 작성.

프레임을 구현한 메서드 안에서 A 객체를 생성하고 JButton이라는 컴포넌트에 addActionListener(a)를 통해 리스너 연결.

 

2번 예시

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class B extends MouseAdapter {
    @Override
    public void mouseClicked(MouseEvent e) {
        System.exit(0);
    }
}
    
 
public class Ex27_Event extends JFrame {
    
    public Ex27_Event() {
        JPanel container = new JPanel();
        JButton jb = new JButton("종  료");
        container.add(jb);
        add(container);
        
        setBounds(200, 200, 300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        B b = new B();
        
        jb.addMouseListener(b);
    }    
Colored by Color Scripter
cs

MouseAdapter를 상속받은 클래스 B를 먼저 생성. 어댑터 안에서 마우스의 이벤트와 관련된 메서드를 작성.

프레임이 있는 메서드에서 B 객체를 생성한 후 addMouseListener(b)를 통해 버튼 컴포넌트에 연결.

 

3번 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Ex28_Event extends JFrame implements MouseListener{
    
 
    public Ex28_Event() {
        JPanel container = new JPanel();
        JButton jb = new JButton("종  료");
        container.add(jb);
        add(container);
        
        setBounds(200, 200, 300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        jb.addMouseListener(this);
    }
    
    
 
    @Override
    public void mouseClicked(MouseEvent e) {
        System.exit(0);
        
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
Colored by Color Scripter
cs

 

먼저 MouseListener 인터페이스를 프레임 클래스에 구현한다. 이러면 인터페이스 내부의 추상메서드를 모두 재정의 해줘야 한다. Adapter는 이 중 기능을 골라서 작성할 수 있지만 인터페이스를 구현할 시 전부 재정의 해야 하므로 코드가 길어짐.  jb.addMouseListener(this) 에서 this인 이유는 인자로 마우스리스너 인터페이스가 들어가야 하는데 클래스 자체가 MouseListener 인터페이스를 구현하고 있기 때문에 this로 처리가 가능함. 위 코드는 Clicked에 관해서만 작성했지만 나머지 기능도 작성하면 다 동작함.

 

4번 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Ex29_Event extends JFrame {
    
    public Ex29_Event() {
        JPanel container = new JPanel();
        JButton jb = new JButton("종  료");
        container.add(jb);
        add(container);
        
        setBounds(200, 200, 300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        jb.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
                
            }
        });
    }
Colored by Color Scripter
cs

 

addActionListener인자 자체에서 ActionListener인터페이스를 구현해버리는 방법임.

코드가 짧아져서 좋다.

'국기훈련과정 > JAVA 복습노트' 카테고리의 다른 글

13. GUI_다중 화면 예제  (0) 2021.09.01
13. GUI_Event 예제  (0) 2021.08.27
13. GUI_03  (0) 2021.08.26
13. GUI_02  (0) 2021.08.26
13. GUI_01  (0) 2021.08.26
'국기훈련과정/JAVA 복습노트' 카테고리의 다른 글
  • 13. GUI_다중 화면 예제
  • 13. GUI_Event 예제
  • 13. GUI_03
  • 13. GUI_02
Purewater
Purewater
Purewater
프로그램 공부 일기장
Purewater
전체
오늘
어제
  • 분류 전체보기 (237)
    • Front-end (8)
      • Vue (8)
    • 포트폴리오 (3)
      • JSP SHOP (1)
      • Travelanner (1)
      • OAuth2 Blog (1)
    • 취업 준비 (70)
      • Spring boot (43)
      • JPA (1)
      • Spring security (14)
      • React (11)
      • 면접 기록 (1)
    • 국기훈련과정 (57)
      • JAVA 복습노트 (12)
      • Oracle SQL (9)
      • Web (15)
      • JSP (6)
      • Spring (10)
      • 프로젝트 (4)
      • Python (1)
    • 알고리즘 문제풀이 (17)
      • Python3 (13)
      • Kotlin (4)
    • 이것저것 지식 (9)
    • 클라우드 서버 (7)
      • Linux (7)
    • Backend (20)
      • node.js (9)
      • JAVA (6)
      • spring boot (5)
    • DB (1)
      • SQL (1)
    • 잡담 (1)
    • 강의 수강 (1)
    • CS 지식 (41)
      • 디자인패턴 (6)
      • 네트워크 (22)
      • 데이터베이스 (4)

블로그 메뉴

  • 대문
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 노드
  • spring
  • db
  • Oracle
  • Kotlin
  • 자바스크립트
  • Java
  • 오라클
  • gitignore
  • git
  • redis
  • node.js
  • GUI
  • js
  • JPA
  • SQL
  • node
  • Postman
  • PostgreSQL
  • 디자인패턴

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Purewater
13. GUI_Event
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.