Key 이벤트와 포커스
키 입력 시, 다음 세 경우에 Key 이벤트 발생
- 키를 누르는 순간
- 누른 키를 떼는 순간
- 누른 키를 떼는 순간(Unicode 키의 경우에만)
키 이벤트를 받을 수 있는 조건
- 모든 컴포넌트 가능하지만, 현재 포커스(focus)를 가진 컴포넌트
포커스(focus)
- 컴포넌트나 응용프로그램이 키 이벤트를 독점하는 권한
- 컴포넌트에 포커스 설정 방법 : 다음 2 라인의 코드 필요
component.setFocusable(true); // component가 포커스를 받을 수 있또록 설정
component.requestFocus(); //component에 포커스 강제 지정
(참고)
- 자바 플랫폼마다 실행 환경의 초기화가 서로 다를 수 있기 떄문에 다음 코드가 필요.
component.setFocusable(true);
컴포넌트에 포커스 주기
스윙 프레임이 만들어질 포커스를 주고자 하는 경우
- JFrame의 setVisible(true) 이후에 포커스를 주어야함
setVisible(true); //스윙 프레임 출력
component.setFocusable(true);
component.requestFocus();
마우스로 컴포넌트를 클릭할 때 포커스 지정하는 방법
component.addMouseListener(new MouseAdapter()){
public void mouseClicked(MouseEvent e){
Component c = (Component)e.getSource(); // 클릭된 컴포넌트
c.setFocusable(true);
c.requestFocus();
}
}}; // 예제 10-8에서 활용했었음.
KeyListener의 메소드와 키

키는 2가지 종류

입력된 키 판별
- 키가 입력되면 키 정보를 가진 이벤트 객체 생성 : KeyEvent 객체
- KeyEvent 객체가 리스너에 전달됨
- 키의 문자 코드 (유니코드) 알아내기, char KeyEvent.getKeyChar()
- 눌러진 키에 해당하는 문자 코드(유니코드) 리턴
- 눌러진 키가 문자 키인 경우에만 작동
- 입력된 키의 가상 키 값 알아내기, int KeyEvent.getKeyCode()
- 모든 키에 대해 작동
- 입력된 키를 판별하기 위해 가상키(Virtual Key) 값과 비교
- 가상 키 값은 KeyEvent 클래스의 상수로 정의됨
- 키 이름 문자열 리턴 String KeyEvent.getKeyText(int keyCode)
- Static 메소드
- 매개변수 KeyCode의 코드 값(가상 키)에 해당하는 키의 이름 문자열 리턴
- F1 키의 경우 "F1", Shift 키의 경우 "SHIFT" 등의 문자열 리턴
KeyEvent의 getKeyChar()과 getKeyCode()

예제 10-6 : 다양한 KeyEvent와 KeyListener 활용

- keyMessage[i].setOpaque(true);
-> 컴포넌트의 바탕색이 보이도록 하기 위해서는 컴포넌트가 불투명하게 지정되어야 함.
- keyMessage[0~2].setText
->KeyAdapter 상속이유