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);
}
|
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);
}
|
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
}
|
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);
}
});
}
|
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 |