GUI 이벤트 처리

ChoRong0824·2022년 9월 16일
0

Java_GUI

목록 보기
3/9

  • 마우스 이벤트 -> 좌 클릭, 우 클릭 무엇을, 몇번 눌렀는지 파악 가능

이벤트 기반 프로그래밍

이벤트 기반 프로그래밍 (Event Driven Programming)

  • 이벤트 종류
    - 사용자의 입력 : 마우스 드래그, 마우스 클릭, 키보드 누름 등
    - 센서로부터의 입력, 네트워크로부터 데이터 송수신
    - 다른 응용프로그램이나 다른 스레드로부터의 메시지
  • 이벤트의 발생에 의해 프로그램 흐름이 결정되는 방식
    - 이벤트가 발생하면 이벤트를 처리하는 루틴(이벤트 리스너) 실행
    - 프로그램 내의 어떤 코드가 언제 실행될 지 이벤트 발생에 의해 전적으로 결정
  • 반대되는 개념 : 배치 실행(batch programming)
    - 프로그램의 개발자가 프로그램의 흐름을 결정하는 방식

이벤트 기반 프로그램의 구조

  • 이벤트 리스너 들의 집함
    (인터페이스로 구성되어있음, 인터페이스는 무조건 구현 해야함)

이벤트 처리 순서

  • 이벤트 발생 (예: 마우스나 키보드의 움직임 혹은 입력)
  • 이벤트 객체 생성
    - 현재 발생한 이벤트에 대한 정보를 가진 객체
  • 이벤트 리스너(이벤트를 처리하도록 만들어진 코드) 찾기
  • 이벤트 리스너 호출
    - 이벤트 객체가 리스너에 전달됨
  • 이벤트 리스너 실행

이벤트의 실제 예

  • Container Event, Mouse Event 가 발생하는 이유 : 컨테이너에 변화가 있기 때문

자바의 이벤트 기반 GUI 응용프로그램 구성

이벤트 관련 용어

이벤트 소스

  • 이벤트를 발생시킨 GUI 컴포넌트

이벤트 객체

  • 발생한 이벤트에 대한 정보
    - 예) 이벤트 종류, 이벤트 소스, 화면 좌표, 마우스 버튼 종류, 눌러진 키

이벤트 리스너 (인터페이스, 인터페이스는 반드시 구현)

  • 이벤트를 처리하는 코드
  • 컴포넌트에 등록되어야 작동 가능

이벤트 분배 스레드

  • 동작
    - 자바 가상 기계로부터 이벤트의 발생을 통지 받음
    - 이벤트 소스와 이벤트 종류 결정
    - 적절한 이벤트 객체 생성, 이벤트 리스너를 찾아 호출
  • 무한 루프를 실행하는 스레드

이벤트 객체

이벤트 객체란?

  • 이벤트가 발생할 때, 발생한 이벤트에 관한 정보를 가진 객체
  • 이벤트 리스너에 전달됨
    - 이벤트 리스너 코드에서 이벤트가 발생한 상황을 파악할 수 있게 함 (확인 가능)

이벤트 객체의 종류

(참고)

이벤트 객체가 포함하는 정보

  • 이벤트의 종류, 소스. 발생한 화면 좌표, 컴포넌트 내 좌표
  • 버튼이나 메뉴 아이템에 이벤트가 발생한 경우 버튼이나 메뉴 아이템의 문자열
  • 클릭된 마우스 버튼 번호
  • 마우스의 클릭 횟수
  • 키가 눌러졌다면 키의 코드 값과 문자 값
  • 체크박스, 라디오버튼 등과 같은 컴포넌트에 이벤트가 발생하였다면 체크 상태

이벤트에 따라 조금씩 다른 정보 포함

  • Action 객체 : 액션 문자열
  • MouseEvent 객체 : 마우스의 위치 정보, 마우스 버튼, 함께 눌러진 키 정보 등
  • ItemEvent 객체 : 아이템의 체크 상태

이벤트 소스 알아 내기

  • Object EventObject.getSource()
    - 발생한 이벤트의 소스 컴포넌트 리턴
    - Object 타입으로 리턴하므로 캐스팅하여 사용
    - 모든 이벤트 객체에 대해 적용

이벤트 객체의 메소드

업로드중..

이벤트 리스너(Event Listener)

이벤트 리스너란?

  • 이벤트를 처리하는 코드, 클래스로 작성

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

  • 개발자가 리스너 인터페이스의 추상 메소드 구현
    - 이벤트가 발생하면 자바 플랫폼은 리스너 인터페이스의 추상 메소드 호출
  • 예) ActionListener 인터페이스
inerface ActionListener{ //아래 메소드를 개발자가 구현해야함
	public void actionPerformed(ActionEvent e); // Action 이벤트 발생시 호출됨
}
  • 예) MouseListener 인터페이스
inerface MouseListener{ // 아래의 5개 메소드를 개발자가 반드시 구현해야 함.
	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); // 마우스가 컴포넌트 위에서 내려오는 순간 호출
    }
profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글