Java(GUI)_Layout_26

2024. 11. 6. 18:27·Java/기초 내용 정리

2024-11-06

 

 

 

 

 

 

 

package basic;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/*
 *  Event Handler(이벤트 핸들러)?
 *  - 각 컴포넌트에 대하여 특정 행위를 하였을 때 그 행위에 대한
 *    작업을 처리할 수 있도록 하는 것을 말함.
 *    사용자 또는 프로그램에 의해 발생할 수 있는 하나의 사건.
 *  - 이벤트를 처리하는 자바 프로그램 코드로써 클래스를 만듦.
 *    이벤트 리스너는 인터페이스를 제공하며, 개발자는 이 인터페이스를
 *    상속을 받고 추상메서드를 구현하여 이벤트 리스너를 작성한다.
 *  - 현재 발생한 이벤트에 관한 정보를 가진 객체를 말함.
 *    이벤트 리스너에게 전달이 됨.
 *  - 각 컴포넌트별 이벤트 처리 메서드 : add로 시작하여 Listener
 *    로 끝나는 메서드.
 *  - 이벤트 관련 클래스 : Listener 인터페이스, Adapter 클래스,
 *                     Event 클래스
 *  - 이벤트 리스너는 모두가 다 인터페이스임(xxxListener)
 *    이벤트 리스너는 이벤트를 처리하는 프로그램 코드를 말함.
 *    이벤트 리스너는 컴포넌트에 연결되어 있어야 작동을 함.
 *    즉, 화면에 구성된 컴포넌트들은 이벤트 리스너를 하나씩 가지고 있음.
 *  - 컴포넌트와 이벤트 리스너를 연결시키는 메서드 : addXXXXListener()
 *    ==> XXXX는 리스너 이름.
 *    
 *  - 이벤트 리스너 작성 과정
 *    1) 이벤트와 이벤트 리스너 선택 
 *       ==> 목적에 적합한 이벤트와 리스너 인터페이스 선택.
 *    2) 이벤트와 리스너 클래스 작성
 *       ==> 리스너 인터페이스를 상속받은 클래스를 작성하고
 *           추상메서드를 모두 구현.
 *    3) 이벤트 리스너 등록
 *       ==> 이벤트를 받을 컴포넌트에 이벤트 리스너 등록
 * /

/*
 * Event Handler 클래스 생성 방법 - 4가지
 * 1. Listener 인터페이스를 구현하는 방법
 * 2. Adapter 클래스를 구현하는 방법
 * 3. Frame 클래스에 Listener 구현하는 방법 - 가장 많이 사용.
 * 4. 익명 클래스를 이용하는 방법 - 많이 사용이 됨. 
 */

/*
 * 아래 화면과 같이 버튼을 눌렀을 때 이벤트가 발생되고
 * 처리되는 과정을 한 번 확인해 보자.
 * 1. 사용자가 마우스로 화면의 버튼을 누른다.
 * 2. 버튼 클릭은 운영체제의 마우스 드라이버를 거쳐 
 *    자바 가상 기계에 전달된다.
 * 3. 자바 가상 기계는 이벤트 분배 스레드(Event Dispatch Thread)
 *    에게 마우스 클릭에 관한 정보를 보낸다.
 * 4. 이벤트 분배 스레드는 이벤트(ActionEvent) 객체를 생성함.
 *    이벤트 객체는 이벤트에 관한 여러 정보를 담은 객체임.
 *    이벤트 객체 내에 저장되는 정보 중, 특별히 이벤트를 발생시킨
 *    컴포넌트를 이벤트 소스(Event Source)라고 부름. 여기서
 *    이벤트 소스는 JButton 컴포넌트임.
 * 5. 이벤트 분배 스레드는 JButton에 연결된 이벤트 리스너를
 *    찾아 호출을 함.
 * 6. 이벤트 분배 스레드는 이벤트 리스너로부터 리턴한 후 다음 
 *    이벤트를 기다리게 됨.
 *    
 * 위 내용 중 주요 용어
 * - 이벤트 소스 : 이벤트를 발생시킨 GUI 컴포넌트.
 * - 이벤트 객체 : 발생한 이벤트에 대한 정보(이벤트 종류, 이벤트 소스,
 *             화면 좌표, 마우스 버튼 종류, 눌려진 키)를 담는
 *             객체로서, 이벤트에 따라 서로 다른 정보가 저장됨.
 * - 이벤트 리스너 : 이벤트를 처리하는 코드로서 컴포넌트에 등록되어야
 *              작동이 가능함.
 * - 이벤트 분배 스레드 : 이벤트 기반 프로그래밍의 핵심 요소로써
 *                 무한 루프를 실행하는 스레드임. 자바 가상
 *                 기계로부터 이벤트의 발생을 통지 받아, 이벤트
 *                 소스와 이벤트 종류를 결정하고 이에 따라 적절한
 *                 이벤트 객체를 생성하고 이벤트 리스너를 찾아 
 *                 호출함.
 */

//  독립된 클래스를 작성하여 이벤트를 처리하는 방법
class A implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
	
		JOptionPane.showMessageDialog(null, "시스템 종료");
		
		System.exit(0);		//  시스템을 종료시키는 메서드.
	}
}

public class Ex26_Event extends JFrame {

	public Ex26_Event() {
	
		JPanel container = new JPanel();
		
		JButton exit = new JButton("종료");
		
		container.add(exit);
		
		add(container);
		
		setBounds(100, 100, 200, 200);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setVisible(true);
		
		//  이벤트 처리
		A a = new A();
		
		//  이벤트 등록
		exit.addActionListener(a);
	}
	
	public static void main(String[] args) {
		
		new Ex26_Event();
	}
}

'Java > 기초 내용 정리' 카테고리의 다른 글

Java(GUI)_Layout_28  (0) 2024.11.06
Java(GUI)_Layout_27  (0) 2024.11.06
Java(GUI)_Layout_25  (0) 2024.11.06
Java(GUI)_Layout_24  (1) 2024.11.06
Java(UtilClass)_Wrapper_01  (0) 2024.11.06
'Java/기초 내용 정리' 카테고리의 다른 글
  • Java(GUI)_Layout_28
  • Java(GUI)_Layout_27
  • Java(GUI)_Layout_25
  • Java(GUI)_Layout_24
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Java(GUI)_Layout_26
상단으로

티스토리툴바