- 리스너 인터페이스를 사용하여 이벤트 리스너를 구현할 시 인터페이스가 제공하는 모든 메소드를
구현해야하는 부담을 줄여주기 위해 생긴 클래스
- 인터페이스의 모든 메소드가 단순 리턴하게 구현 되있는 클래스
- 메소드가 1개인 리스너 인터페이스는 제공해 주지 않는다.
( Action. Item. Text. Adjustment )
ex) class KeyAdapter implements KeyListener{
public void KeyPressed(keyEvent e){}
public void KeyReleased(keyEvent e){}
public void KeyType(keyEvent e){}
}
위는 어뎁터 클래스중 하나의 클래스로 KeyListener의 어댑터 클래스이다.
이번엔 어뎁터 클래스를 사용한 코드예를 보자!!!
리스너쪽에 한정된 기술이므로 리스너가 구현 된 쪽만 살펴 보도록 한다.
다음 클래스는 마우스리스너를 상속받아 구현된 리스너이다.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyMouseListener implements MouseListener{
public void mouseClicked(MouseEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("Mouse Event Test Button")){
btn.setText("마우스 이벤트 테스트 버튼");
}else{
btn.setText("Mouse Event Test Button");
}
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.BLUE);
}
public void mouseExited(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.YELLOW);
}
}
이것을 어뎁터 클래스를 사용하여 변경해보겠다.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyMouseListener extends MouseAdapter{
public void mouseClicked(MouseEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("Mouse Event Test Button")){
btn.setText("마우스 이벤트 테스트 버튼");
}else{
btn.setText("Mouse Event Test Button");
}
}
public void mouseEntered(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.BLUE);
}
public void mouseExited(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.YELLOW);
}
}
소스코드가 딱히 변한 것은 없지만 사용자가 사용안하는 메소드에 대해서 구현을 안해도
자동으로 한 것 처럼 인식하기 시작한다. 이는 어뎁터 클래스에 이미 구현이 다 되 있기 때문이다.
만약 어댑터클래스를 사용하지 않고, 인터페이스로 구현햇을시
모든 메소드를 구현하지 않으면 다음과 같은 오류가 발생한다.
이 오류는 항상뜨는 것은 아니고, 구현되지 않는 동작에 대해서 행동을 취할 시 발생한다.
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
The type MyMouseListener must implement the inherited abstract method MouseListener.mousePressed(MouseEvent)
구현해야하는 부담을 줄여주기 위해 생긴 클래스
- 인터페이스의 모든 메소드가 단순 리턴하게 구현 되있는 클래스
- 메소드가 1개인 리스너 인터페이스는 제공해 주지 않는다.
( Action. Item. Text. Adjustment )
ex) class KeyAdapter implements KeyListener{
public void KeyPressed(keyEvent e){}
public void KeyReleased(keyEvent e){}
public void KeyType(keyEvent e){}
}
위는 어뎁터 클래스중 하나의 클래스로 KeyListener의 어댑터 클래스이다.
이번엔 어뎁터 클래스를 사용한 코드예를 보자!!!
리스너쪽에 한정된 기술이므로 리스너가 구현 된 쪽만 살펴 보도록 한다.
다음 클래스는 마우스리스너를 상속받아 구현된 리스너이다.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyMouseListener implements MouseListener{
public void mouseClicked(MouseEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("Mouse Event Test Button")){
btn.setText("마우스 이벤트 테스트 버튼");
}else{
btn.setText("Mouse Event Test Button");
}
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.BLUE);
}
public void mouseExited(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.YELLOW);
}
}
이것을 어뎁터 클래스를 사용하여 변경해보겠다.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyMouseListener extends MouseAdapter{
public void mouseClicked(MouseEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("Mouse Event Test Button")){
btn.setText("마우스 이벤트 테스트 버튼");
}else{
btn.setText("Mouse Event Test Button");
}
}
public void mouseEntered(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.BLUE);
}
public void mouseExited(MouseEvent e) {
JButton btn = (JButton)e.getSource();
btn.setBackground(Color.YELLOW);
}
}
소스코드가 딱히 변한 것은 없지만 사용자가 사용안하는 메소드에 대해서 구현을 안해도
자동으로 한 것 처럼 인식하기 시작한다. 이는 어뎁터 클래스에 이미 구현이 다 되 있기 때문이다.
만약 어댑터클래스를 사용하지 않고, 인터페이스로 구현햇을시
모든 메소드를 구현하지 않으면 다음과 같은 오류가 발생한다.
이 오류는 항상뜨는 것은 아니고, 구현되지 않는 동작에 대해서 행동을 취할 시 발생한다.
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
The type MyMouseListener must implement the inherited abstract method MouseListener.mousePressed(MouseEvent)