프로그래밍 언어/JAVA

어댑터(Adapter) 클래스

· 코딩마이데이

리스너 인터페이스를 상속받아 이벤트 리스너를 구현할 때 리스너 인터페이스의 메서드를 모두 구현하여야 하는 부담이 있습니다.

자바의 JDK에는 이런 부담을 줄이기 위해 리스너 인터페이스를 미리 구현해 놓은 클래스를 제공하는데 이것이 바로 어댑터 클래스(Adapter)입니다.

class MouseAdapter extends MouseListener, MouseMotionListener, MouseWheelListener {
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
        public void mouseClicked(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) { }
        public void mouseExited(MouseEvent e) {  }
        public void mouseDragged(MouseEvent e) { }
        public void mouseMoved(MouseEvent e) { }
        public void mouseWheelMoved(MouseWheelEvent e) { }
 }

 

개발자들은 이벤트 리스너를 작성할 때, 리스너 인터페이스 대신 어댑터 클래스를 이용하는 것이 훨씬 편하다.

리스너 인터페이스와 대응하는 어댑터 클래스
MouseListener를 MouseAdapter로 변경한 경우

 

MouseAdapter 사용하기

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseAdapterEx extends JFrame {
    private JLabel la = new JLabel("Hello"); // "Hello"출력하기 위한 레이블

    public MouseAdapterEx() {
        setTitle("Mouse 이벤트 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.addMouseListener(new MyMouseAdapter()); // 컨텐트팬에 Mouse 이벤트 리스너 달기

        c.setLayout(null); // 컨텐트팬의 배치관리자 삭제
        la.setSize(50, 20); // 레이블의 크기 50x20 설정
        la.setLocation(30, 30); // 레이블의 위치(30, 30)으로 설정
        c.add(la); // 레이블 컵포넌트 삽입

        setSize(250, 250);
        setVisible(true);
    }

    // MouseAdapter를 상속받아 리스너 구현
    class MyMouseAdapter extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
            int x = e.getX(); // 마우스 클릭 좌표 X
            int y = e.getY(); // 마우스 클릭 좌표 Y
            la.setLocation(x, y); // 레이블의 위치를 (x, y)로 이동
        }
    }

    public static void main(String[] args) {
        new MouseAdapterEx();
    }
}

 

 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

MouseEvent와 MouseListener, MouseMotionListener, MouseWheelListener  (1) 2025.06.17
KeyEvent와 KeyListener  (1) 2025.06.14
이벤트 리스너  (1) 2025.06.08
이벤트 객체  (0) 2025.06.05
이벤트 기반 프로그래밍  (1) 2025.06.05