JAVA GUI EVENT

robin Han·2022년 12월 13일
0

Study Java

목록 보기
2/3

JAVA Event

이벤트는 사용자의 입력또는 센서, 다른 응용프로그램으로 오는 메시지등이 발생(트리거) 하는 것

이벤트의 발생에 의해 프로그램 흐름이 결정

  • 이벤트가 발생하면 이벤트를 처리하는 이벤트리스너를 실행
  • 따라서 이벤트의 발생으로 프로그램이 실행된다
    배치 실행 (batch programming)
  • 프로그램의 개발자의 의해 프로그램의 흐름이 결정

이벤트 프로그램 = 이벤트 리스너들의 집합

이벤트 처리 순서

1) 이벤트 발생
2) 이벤트 객체 생성
3) 이벤트 리스너 탐색
4) 이벤트 리스너 호출
5) 이벤트 리스너 실행

용어

이벤트 소스: 이벤트를 발생 시킨 GUI component ( JButton )
이벤트 객체: 발생한 이벤트에 대한 정보
이벤트 리스너: 이벤트를 처리하는 코드, 컴포넌트에등로 되어야 작동
이벤트 분배 스레드: 동작/ JVM에서 이벤트 발생을 통지 받는다, 이벤트 소스와 이벤트 종류 결정, 이벤트 객체 생성

이벤트 객체

이벤트 리스너 한테 전달되는 이벤트에 대한 정보를 가지고 있는 객체
이벤트 발생상황 파악

이벤트 객체 포함 정보 :

  • 이벤트 종류
  • 이벤트 소스
  • 이벤트 화면/컴포넌트 좌표
  • 버튼, 메뉴 아이템 문자열
  • 마우스 버튼 번호
  • 클릭 횟수
  • 체크 상태
  • 키가 눌리면 키의 코드 값과 문자 값

Action Event: 액션 문자열
Mouse Event: 마우스 위치, 마우스 버트, 눌러진 키
Item Event : 체크 상태

이벤트 리스너

이벤트를 처리하는 코드

JDK에 이벤트 리스너 작성을 위한 인터페이스 제공

interface ActionListener{
 public void actionPerformed( ActionEvent e );}

3단계 이벤트 리스너 작성 과정

  1. 이벤트와 이벤트 리스너 선택
  2. 이벤트 리스너 클래스 작성
    class MyActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    // 버튼 클릭 시 호출되는 메소드
    JButton b = (JButton)e.getSource(); 
    // 클릭된 버튼 알아내기 
    if(b.getText().equals("Action")) 
    // 버튼의 문자열이 “Action”인지 비교
    b.setText("액션"); else
    b.setText("Action"); }}
 3. 이벤트 리스너 등록
 ```java
 MyActionListener listener = new MyActionListener(); // 리스너 객체 생성 
 btn.addActionListener(listener); // 리스너 등록

컴포넌트는 다른 이벤트에 대한 리스너를 동시에 가질수있다
컴포넌트는 한이벤트에 대해 여러개의 리스너를 동시에 가질수있다

이벤트 리스너 3가지 방법

  1. 독립적 클래스로 작성 가능
    a.여러곳에 사용할때 적합

  2. 내부 클래스에서 작성
    a.클래스 안에 멤버처럼 작성
    b.이벤트 리스너를 특정 클래스에서만 사용할때

  3. 익명 클래스 로 작성 가능
    a. 이름없이 리스너만 작성
    b. 리스너 코드가 간단할때

    익명 클래스

    (클래스 정의 + 인스턴스 생성)을 한번에 작성
    implements를 사용안하고, new 생성자로 인스턴스 바로 생성

    adapter 어뎁터 클래스

    이벤트 리스너 작성시 모든 추상 메소드 구현이 부담
    클래스를 만들어 사용하는 메소드 구현하고 나머지는 단순 리턴하게 하면됨.

Key 이벤트

키를 누르는 순간
누르는 키를 떼는 순간

포커스를 받은 컴포넌트에 사용 가능
keypressed
keyrelease
keytyped
component.keylistener();

포커스

컴포넌트 키 이벤트 독점하는 권한

	component.setFocusable(true);//포커스 받을수있게 설정
    component.requestFocus(); //포커스 강제 지정 

  1. 유니코드
    전세계의 문제에 대한 코드 체계
    문자, a ,b,1,3,$
    keypressed() -> keyTyped() -> keyReleassed()

  2. NON-유니코드
    제어키: F5 Alt , ctrl, ESC , Home
    정의된 유니코드값 없음
    키마다 각각의 가상코드로 사용
    keypressed() -> keyReleased()

  3. 가상 키
    유니코드가 아닌 모든키 는 자바의 가상코드가 정의됨

    문자 유니코드
    char KeyEvent.getKeyChar(); 'a'
    가상 키 값
    int KeyEvent.getKeyCode(); VK_F5
    키 이름 문자열 리턴
    String KeyEvent.getkeyText(int keycode)// Shift = "Shift"

0개의 댓글