• 리스너 작성시 모든 추상 메소드를 구현해야 하는 부담이 있다.
• 리스너의 모든 메소드가 단순 리턴하도록 구현한 클래스
• 추상 메소드가 하나뿐인 리스너를 어댑터 클래스가 없다.
-> ActionListener, ItemListener, AdjustmentListener 는 어뎁터 클래스 x
class MouseAdapter implements 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(MouseEvent e) {}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MouseAdapterExample extends JFrame {
private JButton jButton = new JButton("Java");
public MouseAdapterExample() {
super("MouseAdapter 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.addMouseListener(new ExMouseListener());
contentPane.setLayout(new FlowLayout());
jButton.setSize(40, 30);
jButton.setLocation(130, 85);
contentPane.add(jLabel);
setSize(300, 200);
setVisible(true);
}
class ExMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
jButton.setText(x + ", " + y);
}
}
public static void main(String[] args) {
new MouseAdapter();
}
}
• 실행 결과
화면 클릭 시
• 키를 누르는 순간
• 누른 키를 떼는 순간
• 누를 키를 떼는 순간 (Unicode 키의 경우에만)
• 모든 컴포넌트가 가능하지만, 현재 포커스를 가진 컨포넌트
• 컴포넌트나 응용 프로그램이 키 이벤트를 독점하는 권한
• 포커스 설정
// 컴포넌트가 포커스를 받을 수 있도록 설정
component.setFocusable(true);
// 컴포넌트에 포커스를 지정
component.requestFocus();
// 키를 누르는 순간
void keyPressed(KeyEvent e) {
....
}
// 누른 키를 떼는 순간
void keyReleased(KeyEvent e) {
....
}
// 키를 떼는 순간 Unicode 키가 입력된 경우
void keyTyped(KeyEvent e) {
....
}
• 전 세계의 문자에 대한 코드 체계
• 문자들에 대해서만 유니 코드 값을 정의한다.
• A ~ Z, a ~ z, 0 ~ 9, !, @ , & 등
• 문자 키가 아닌 키들 (제어 키)
• 정의된 유니코드 값 없는 키들
• 키마다 키 코드 값(가상 키 코드 값)이 정의되어 있다.
• < Fuction >, < Home >, < Up >, < Shift > 등
• 모든 키에 자바의 가상 키 코드가 정의되어 있다.
• 가상 키 값으로 어떤 키인지 비교 판단 가능
• KeyEvent 클래스에 상수로 선언
• 키가 입력되면 키 정보를 가진 이벤트 객체를 생성
-> KeyEvent 객체
-> KeyEvent 객체가 이벤트 리스너에 전달된다.
• char KeyEvent.getKeyChar()
• 눌러진 키가 문자 키인 경우에만 작동
• 눌러진 키의 문자 코드(유니코드) 리턴
• int KeyEvent.getKeyCode()
• 모든 키에 대해 작동
• 입력된 키를 판별하기 위해 가상키 값과 비교
• KeyEvent 클래스의 상수로 정의됨
• String KeyEvent.getKeyText(int keyCode)
• static 메소드
• 매개변수 keyCode의 가상 키에 해당하는 키의 이름 문자열 리턴
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyEventExample extends JFrame {
private JLabel[] jLabels;
public KeyEventExample() {
super("Key Listener 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.addKeyListener(new ExKeyListener());
jLabels = new JLabel[3];
jLabels[0] = new JLabel(" getKeyCode() ");
jLabels[1] = new JLabel(" getKeyChar() ");
jLabels[2] = new JLabel(" getKeyText() ");
for(int i=0; i<jLabels.length; i++) {
contentPane.add(jLabels[i]);
jLabels[i].setOpaque(true);
jLabels[i].setBackground(Color.ORANGE);
}
setSize(300, 200);
setVisible(true);
contentPane.setFocusable(true);
contentPane.requestFocus();
}
class ExKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
char keyChar = e.getKeyChar();
jLabels[0].setText(Integer.toString(keyCode));
jLabels[1].setText(Character.toString(keyChar));
jLabels[2].setText(e.getKeyText(keyCode));
}
}
public static void main(String[] args) {
new KeyEventExample();
}
}
• 실행 결과
키 클릭 후