JAVA/멀티스레드, 이벤트
java 리스너 이벤트 처리 방법 (익명 객체, 내부 클래스)
읽히는 블로그
2024. 5. 24. 10:02
▤ 목차
💫이벤트 처리

❓이벤트 리스너란?
발생된 이벤트 객체에 반응하여 이벤트를 처리하는 객체를 말한다.
사용자가 버튼을 클릭하거나, 마우스를 움직이거나, 키보드를 누르면 이벤트가 발생한다.
class --Listener implements ActionListener{
public void actionPerformed (ActionEvent e){... //이벤트 객체가 발생하면 호출}
}
이벤트를 처리하는 몇가지 방법이 있다.
이 글에서는 이벤트 처리 코드를 정리해보고자 한다.
- inner Class로 받아서 처리하는 방법
- 익명클래스로 처리하는 방법
✔ implements ActionListener 사용
💻 코드로 보기
public class ExEvent extends Frame implements ActionListener {
private Button btn1 = new Button("button1");
private Button btn2 = new Button("button2");
public ExEvent() {
super("이벤트 연습");
addLayout();
addWindowListener(new WindowAdapter() { //종료버튼
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void addLayout() {
add("East", btn1); //frame은 BorderLayout이 기본
add("West",btn2);
btn1.addActionListener(this);
btn2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn1) { //객체 비교
setTitle("버튼1 클릭");
}else if(e.getSource() == btn2) {
setTitle("버튼2 클릭");
}
}
public static void main(String[] args) {
new Event();
}
}
👏 결과


✔ 내부클래스 사용(implements)
💻 코드로 보기
public class Event extends Frame implements ActionListener {
private Button btn3 = new Button("button3");
public Event() {
super("이벤트 연습");
addLayout();
setBounds(200, 200, 400, 400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void addLayout() {
add("South",btn3);
btn3.addActionListener(new EventTest()); //내부클래스 사용(implements)
}
class EventTest implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// btn3을 클릭하면 수행되는 추상메서드
setTitle("버튼 3을 누르네");
}
}
public static void main(String[] args) {
new Event();
}
}
👏 결과

✔ 내부클래스 사용(extends)
💻 코드로 보기
public class Event extends Frame implements ActionListener {
private Button btn4 = new Button("button4");
public Event() {
super("이벤트 연습");
addLayout();
setBounds(200, 200, 400, 400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void addLayout() {
add("North",btn4);
btn4.addMouseListener(new EventTest2());
}
class EventTest2 extends MouseAdapter{
@Override //일반 메서드 오버라이딩
public void mouseClicked(MouseEvent e) {
//btn4
setTitle("버튼 마우스 이벤트로 btn4 처리");
}
}
public static void main(String[] args) {
new Event();
}
}
👏 결과

✔ 내부 무명 클래스 사용
💻 코드로 보기
public class Event extends Frame implements ActionListener {
private Button btn5 = new Button("button5");
public Event() {
super("이벤트 연습");
addLayout();
setBounds(200, 200, 400, 400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void addLayout() {
add("Center",btn5);
btn5.addMouseListener(new MouseAdapter() { // 내부 무명 클래스 사용
@Override
public void mouseClicked(MouseEvent e) {
// btn5 클릭하면 수행
setTitle("버튼5 클릭");
}
});
}
public static void main(String[] args) {
new Event();
}
}
👏 결과

😊정리
익명객체, 내부클래스(구현, 상속), actionListener 일반 구현으로 총 4가지 방법을 알아봤다.
가장 기초정인 방법은 이벤트를 처리하는 인터페이스를 implements 키워드로 가져와 처리하는 방법이다.
abstract 메소드를 모두 정의해야하기 때문에 소스코드가 복잡해질 수 있다.
한번만 사용할 코드이면 익명객체로 만들 수 있다. 일반적으로 안드로이드 프로그램에서 많이 사용하는 방식이다.
그냥 Frame 클래스를 받는 방법도 있지만 JFrame으로 가볍게 만들 수 있다.
다음에는 JFrame을 정리해보겠다.