JButton은 AbstractButton의 하위 클래스로, GUI 애플리케이션에 플랫폼에 독립적인 버튼을 손쉽게 추가할 수 있도록 해주는 스윙(Swing) 컴포넌트입니다. JButton은 버튼이 눌리거나 클릭되는 순간 ActionListener 인터페이스를 통해 이벤트를 발생시키며, 그 외에도 MouseListener와 KeyListener 인터페이스를 함께 지원합니다.
버튼 위로 마우스 커서가 진입했을 때 롤오버(rollover) 효과를 구현하려면 MouseListener 인터페이스의 mouseEntered() 메서드를 재정의하면 됩니다. 이 메서드는 마우스가 컴포넌트 영역 안으로 들어오는 순간 자동으로 호출되기 때문에, 여기서 버튼의 전경색을 변경해 주면 간단하게 마우스 오버 효과를 만들 수 있습니다. 반대로 마우스가 버튼을 벗어날 때는 mouseExited() 메서드가 호출되므로, 이곳에서 원래 색상으로 되돌려 주면 자연스러운 롤오버 효과가 완성됩니다.
구문(Syntax)
void mouseEntered(MouseEvent e)
예제 코드(Example)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RollOverButtonTest extends JFrame {
private JButton button;
public RollOverButtonTest() {
setTitle("RollOverButton Test");
button = new JButton("Rollover Button");
button.addMouseListener(new MouseAdapter() {
Color color = button.getForeground();
public void mouseEntered(MouseEvent me) {
color = button.getForeground();
button.setForeground(Color.green); // 마우스가 버튼 위에 있을 때 글자색을 초록색으로 변경
}
public void mouseExited(MouseEvent me) {
button.setForeground(color); // 마우스가 벗어나면 원래 색상으로 복원
}
});
add(button, BorderLayout.NORTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new RollOverButtonTest();
}
}
코드 설명
- MouseAdapter 사용: MouseListener 인터페이스의 모든 메서드를 구현할 필요 없이, 필요한 mouseEntered()와 mouseExited() 두 메서드만 재정의할 수 있습니다.
- mouseEntered(): 마우스가 버튼 위로 진입하는 순간 호출되며, setForeground(Color.green)를 통해 버튼 글자색을 초록색으로 변경합니다.
- mouseExited(): 마우스가 버튼에서 벗어나는 순간 호출되며, 미리 저장해 둔 기본 전경색(color)으로 되돌려 줍니다.
- 익명 내부 클래스: 리스너를 익명 클래스로 선언하면 코드가 간결해지고, 버튼 객체에 이벤트 처리 로직을 한 곳에 모아 관리할 수 있습니다.
실행 결과(Output)
프로그램을 실행하고 마우스를 버튼 위로 올리면 버튼의 글자색이 초록색으로 바뀌고, 마우스를 치우면 다시 원래 색상으로 돌아오는 것을 확인할 수 있습니다.
