문준영
새벽 코딩
문준영
전체 방문자
오늘
어제
  • 분류 전체보기
    • 웹 개발
    • JAVA
      • 기본 문법 내용 정리
      • 함수 내용 정리
      • 쉽게 배우는 자바 프로그래밍 문제 풀이
    • HTML
      • HTML
      • CSS
      • 문제풀이
    • JavaScript
    • MYSQL
    • C
      • 기본 문법 내용 정리
      • 백준 알고리즘 (c언어)
      • 자료구조
    • Python
      • 참고 알고리즘
      • 기본 문법 내용 정리
      • 자료구조 내용 정리
      • 백준 알고리즘 (파이썬)
    • 깃허브
    • 멀티잇 풀스택

티스토리

hELLO · Designed By 정상우.
문준영

새벽 코딩

JAVA/기본 문법 내용 정리

GUI 이벤트 처리

2021. 11. 5. 14:52
이벤트 기반 프로그래밍

이벤트 기반 프로그래밍은 이벤트의 발생에 의해 프로그램 실행 흐름이 결정되며 각 이벤트마다 처리하는 이벤트 리스너 코드를 보유하고 있다.

 

  • 순서 
  1. 사용자가 마우스로 화면에 있는 버튼을 클릭 
  2. 버튼클릭으로 JVM에 전달
  3. JVM은 이벤트 분배 스레드에게 버튼 클릭에 관한 정보를 보냄                                                                                            * 이벤트 분배 스레드: 이벤트가 발생하면 이벤트 리스너를 찾아 호출하는 스레드
  4. 이벤트 분배 스레드는 이벤트 객체를 생성                                                                                                                            * 이벤트 객체: 발생한 이벤트에 대한 여러 정보를 제공하는 객체
  5. 이벤트 분배 스레드는 이벤트 소스에 연결된 이벤트 리스너를 찾아 실행                                                                             * 이벤트 소스: 이벤트 객체내에서 이벤트를 발생시킨 컴포넌트                                                                                  *이벤트 리스너: 이벤트 처리 코드로 클래스로 작성
  6. 이벤트 분배 스레드는 이벤트 리스너로 리턴 한 후 다음 이벤트 발생 대기

** Object getSource() - 어떤 컴포넌트에 이벤트가 발생했는지 이벤트 소스를 알려주는 메서드

 버튼 컴포넌트에서 발생한 경우: JButton b=(JButton)event.getSource();

이벤트 객체

이벤트 객체는 현재 발생한 이벤트에 관한 여러 정보를 가진 객체이며, 이벤트 리스너에게 전달된다.

 

  • 이벤트 객체와 이벤트 소스
이벤트 객체 이벤트 소스 이벤트 발생하는 경우
ActionEvent JButton 마우스나 엔터키로 버튼 선택
JList 리스트 아이템을 더블 클릭하여 리스트 아이템을 선택
JMenuItem 메뉴 아이템 선택
JTextField 텍스트 입력 중에 엔터 키 입력
ItemEvent JCheckBox 체크박스 선택 및 해제
JRadioButton 라디오 버튼의 선택 상태 변경 시
JCheckBoxMenuItem 체크박스 메뉴 아이템 선택 및 해제
JList 리스트 아이템 선택
KeyEvent Component 키가 눌러지거나 눌러진 키를 뗄 때
MouseEvent Component 마우스 버튼이 눌러지거나 떼어질 때
마우스 버튼이 클릭 될 때
컴포넌트 위에 마우스가 올라갈 때
올라간 마우스가 내려올 때
마우스가 드래그 될 때
마우스를 움직였을 때
FocusEvent Component 컴포넌트가 포커스를 받거나 잃을 때
TextEvent

TextField 텍스트 변경
TextArea 텍스트 변경
WindowEvent Window window를 상속받는 모든 컴포넌트에 대해 윈도우 활성화, 아이콘화, 아이콘에서 복구, 윈도우 열기 닫기 종료

 

 

 

사용자 이벤트 리스너 작성

이벤트 리스너란 이벤트를 처리하는 코드로서 클래스로 작성된다. 자바는 이벤트 리스너 인터페이스를 제공하며 개발자는 인터페이스를 상속받고 추상메소드를 구현하여 이벤트 리스너를 작성한다.

이벤트 부착 메서드: add???Listener();

 

  • 이벤트 리스너 인터페이스
이벤트 종류 리스너 인터페이스 리스너의 추상메소드 메소드가 호출되는 경우
Action ActionListener actionPerformed(ActionEvent) Action 이벤트 발생
Item ItemListener itemStateChanged(ItemEvent) Item 이벤트 발생
Key KeyListener

keyPressed(KeyEvent) 키가 눌러질 때 
keyReleased(KeyEvent) 눌러진 키가 떼어질 때
keyTyped(KeyEvent) 유니코드 키가 입력될 때
Mouse MouseListener

mousePressed(MouseEvent) 마우스 버튼이 눌러질 때
mouseReleased(MouseEvent) 눌러진 마우스 버튼이 떼어질 때
mouseClicked(MouseEvent) 마우스 버튼이 클릴될 때
mouseEntered(MouseEvent) 마우스가 컴포넌트 위에 올라갈 때
mouseExited(MouseEvent) 컴포넌트 위에 올라간 마우스가 컴포넌트를 벗어날 때
Mouse MouseMotionListener mouseDragged(MouseEvent) 마우스를 컴포넌트 위에서 드래그 할 때
mouseMoved(MouseEvent) 마우스가 컴포넌트 위에서 움질일 때
Focus FoucsListener focusGained(FocusEvent) 컴포넌트가 포커스를 받을 때
focusLost(FocusEvent) 컴포넌트가 포커스를 잃을 때
Text TextListener textValueChanged(TextEvent) 텍스트가 변경될 때
Window WindowListener windowOpened(WindowEvent) 윈도우가 생성되어 처음으로 보이게 될 때
windowClosing(WindowEvent) 윈도우의 시스템 메뉴에서 윈도우 닫기를 시도할 때
windowIconfied(WindowEvent) 윈도우가 아이콘화 될 때
windowDeiconfied(WindowEvent) 아이콘 상태에서 원래 상태로 복구 할 때
windowClosed(WindowEvent) 윈도우가 닫혔을 때
windowActivated(WindowEvent) 윈도우가 활성화될 때
windowDeactivated(WindowEvent) 윈도우가 비활성화될 때

 

ex) ActionListener의 경우 

 

  • 이벤트 리스너 작성 방법 1 (클래스로 작성)
  1. 목적에 따른 이벤트와 리스너 인터페이스 선택
  2. 리스너 인터페이스를 상속한 클래스를 작성하고 추상 메서드를 구현   
  3. 1
    2
    3
    4
    5
    6
    public class MyactionListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
       ......구현...
    }
     
    }
    Colored by Color Scripter
    cs
  4. 이벤트를 받을 GUI 컴포넌트에 이벤트 리스너를 등록 
  5. 클래스로 인스턴스 생성후 addActionListener() 를 통해 버튼에 이벤트를 부착                                                 jb.addActionListener(new MyactionListener()); 

 

  • 이벤트 리스너 작성 방법 2 (바로 메서드 작성)
  1. addActionListener()를 통해 버튼에 이벤트 부착
  2. 인스턴스를 생성하는 동시에 익명 클래스로 메서드를 구현  
    1
    2
    3
    4
    5
    jb.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    ..... 구현....
                }
                );
    Colored by Color Scripter


     

어댑터 클래스 

  리스너 인터페이스를 상속받아 구현할 시 모든 인터페이스를 구현해야하는 부담이 생긴다.

  이런 부담을 줄이기 위해 리스너 인터페이스 대신 어댑터 클래스를 상속받아 필요한 메서드만 구현

  1. 해당하는 Adapter 클래스를 상속받고 메서드를 정의                                                                                
    1
    2
    3
    4
    5
    class Mymouse extends MouseAdapter{
            public void mouse(MouseEvent e) {
                ....구현...
            }
        }
    Colored by Color Scripter
     
  2. addMouseListener 메서드를 통해 부착 

 

 

Acation 이벤트

 

  • action Event 메서드
getActionCommand()  이벤트를 발생시킨 객체의 문자열 리턴
getSource()  이벤트를 발생시킨 객체의 위치 값 리턴
getModifiers() 이벤트가 발생되었을 때 같이 사용된 Modifier 키 리턴

 

Key 이벤트

key 이벤트는 사용자가 키를 입력할 때 발생하는 이벤트이며 모든 컴포넌트가 key이벤트를 받을 수 있다. 하지만 응용프로그램 내에 포커스를 가진 컴포넌트가 키 입력을 독점하기 때문에 현재 포커스를 가진 컴포넌트만 key 이벤트가 발생한다.

 

컴포넌트에게 포커스를 주어 키 입력 받게 해주는 메서드 1: compoenet.requestFocus()

 * 해당 메서드는 프레임을 출력하고 컴포넌트에게 포커스를 주기 때문에setVisible(true) 실행 후에 실행돼야 함

컴포넌트에게 포커스를 주어 키 입력 받게 해주는 메서드 2: compoenet.setFoucsable(true)

 

  • KeyListener 메서드  
keyPressed(KeyEvent)  키를 누르는 순간
keyTyped(KeyEvent) 누른 키를 떼는 순간 (유니코드의 경우에만)
keyReleased(KeyEvent) 누른 키를 떼는 순간
  • keyEvent 메서드
char KeyEvent.getKeyChar()  입력된 키의 유니코드 값 반환
int KeyEvent.getKeyCode() 정수형의 키 코드 값 반환

 

  • KeyEvent 가상 키   (KeyEvent.Vk_?)
가상 키 설명 가상 키 설명
VK_0~VK~9 0~9 까지의 키 VK_LEFT 왼쪽 방향 키
VK_A~VK_Z A~Z 까지의 키 VK_RIGHT 오른쪽 방향 키
VK_F1~VK_F24 F1~F24 까지의 키 VK_UP <Up> 키

 

Mouse 이벤트

Mouse 이벤트는 총 7가지로 5가지는 MouseListener의 메서드가 호출되고 나머지 2가지는 MouseMotionListener의 메서드에서 호출된다. 각 메서드는 개별적이며 따로 등록해야 한다.

 

  • MouseListener 메서드
MouseListener 메서드 발생 경우
MouseListener

mousePressed(MouseEvent) 마우스 버튼이 눌러질 때
mouseReleased(MouseEvent) 눌러진 마우스 버튼이 떼어질 때
mouseClicked(MouseEvent) 마우스 버튼이 클릴될 때
mouseEntered(MouseEvent) 마우스가 컴포넌트 위에 올라갈 때
mouseExited(MouseEvent) 컴포넌트 위에 올라간 마우스가 컴포넌트를 벗어날 때
MouseMotionListener mouseDragged(MouseEvent) 마우스를 컴포넌트 위에서 드래그 할 때
mouseMoved(MouseEvent) 마우스가 컴포넌트 위에서 움질일 때

mouseCilcked(): 한 컴포넌트에 마우스 버튼이 눌러졌다가 떼어졌을 때에만 호출

mouseReleased(): 모든 상황에서 마우스 버튼이 눌러졌다가 떼어졌을 때 호출

 

  • MouseEvent 메서드
int getX()  마우스 포인터의 x위치
int getY() 마우스 포인터의 y위치
int getClickCount() 마우스의 클릭 횟수 (주로 더블클릭 인식할 때 사용)
getPoint() 마우스 이벤트가 발생한 좌표

마우스로 컴포넌트 지정 시 포커스 지정 방법:  Component c=(Coponent)event.getSource();

 

Item 이벤트

Item 이벤트는 체크박스나 라디오버튼이 선택되거나 해제될 때 발생하는 이벤트이다.

그러나 선택 상태가 바뀌지 않으면 이벤트는 발생하지 않는다.

 

  • ItemListener 메서드
void itemStateChanged(ItemEvent e)   체크박스의 선택상태가 변하는 경우
  • ItemEvent 메서드
int getStateChange() 체크박스 선택: ItemEvent.SELECTED/ 해제: ItemEvent.DESELECTED 리턴
Object getItem()  이벤트 발생 객체 리턴, 체크박스의 경우 JCheckBox 컴포넌트의 레퍼런스 리턴

 

'JAVA > 기본 문법 내용 정리' 카테고리의 다른 글

다형성  (0) 2022.12.29
정규표현식  (0) 2021.11.18
Swing 컴포넌트  (0) 2021.11.03
자바 GUI 기초  (0) 2021.10.29
컬렉션과 제네릭  (0) 2021.10.29
    'JAVA/기본 문법 내용 정리' 카테고리의 다른 글
    • 다형성
    • 정규표현식
    • Swing 컴포넌트
    • 자바 GUI 기초
    문준영
    문준영
    공부한 내용 정리!

    티스토리툴바