Java에서 마우스 이벤트를 처리하려면 MouseListener 인터페이스를 구현하면 됩니다. 사용자가 소스 객체 위에서 마우스 버튼(왼쪽 또는 오른쪽)을 누르거나, 놓거나, 클릭(누른 후 놓기)할 때 MouseEvent가 발생합니다. 또한 마우스 포인터가 소스 객체에 진입(enter)하거나 벗어날(exit) 때에도 이벤트가 트리거됩니다.
라벨(JLabel)과 같은 컴포넌트 위로 마우스가 이동하는 것을 감지하려면 MouseAdapter 클래스 또는 MouseListener 인터페이스의 mouseEntered() 메서드를 사용하고, 마우스가 컴포넌트를 벗어나는 것은 mouseExited() 메서드로 감지할 수 있습니다.
예제 코드
아래 예제는 JLabel 위에 마우스가 올라갈 때와 벗어날 때 배경색과 글자색이 서로 바뀌도록 구현한 코드입니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MouseOverTest extends JFrame {
private JLabel label;
public MouseOverTest() {
setTitle("MouseOver Test");
setLayout(new FlowLayout());
label = new JLabel("Move the mouse moves over this JLabel");
label.setOpaque(true);
add(label);
label.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
Color c = label.getBackground(); // 마우스가 라벨 위로 이동하면 배경색이 변경됩니다.
label.setBackground(label.getForeground());
label.setForeground(c);
}
public void mouseExited(MouseEvent evt) {
Color c = label.getBackground();
label.setBackground(label.getForeground());
label.setForeground(c);
}
});
setSize(400, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new MouseOverTest();
}
}실행 결과
프로그램을 실행하면 창 중앙에 JLabel이 표시됩니다. 마우스 포인터를 라벨 위로 이동시키면 mouseEntered() 메서드가 호출되어 배경색과 전경색이 서로 교환되어 색상이 반전된 것처럼 보입니다. 마우스가 라벨을 벗어나면 mouseExited() 메서드가 호출되어 다시 원래 색상으로 되돌아갑니다.
핵심 정리
- MouseListener: mouseClicked(), mousePressed(), mouseReleased(), mouseEntered(), mouseExited() 등 5개의 메서드를 모두 구현해야 하는 인터페이스입니다.
- MouseAdapter: 필요한 메서드만 오버라이드하면 되는 어댑터 클래스로, 불필요한 빈 구현을 줄여 코드를 간결하게 만들어 줍니다.
- setOpaque(true): JLabel은 기본적으로 배경이 투명하기 때문에 배경색 변경이 화면에 반영되려면 반드시 불투명 설정을 해주어야 합니다.