[Java 18-2 EventHandleApp] 이벤트 처리 프로그램 작성 방법

임승현·2022년 10월 19일

Java

목록 보기
93/126

🐧컴퍼넌트에서는 다양한 이벤트 발생되며 컴퍼넌트에서 이벤트가 발생될 경우 원하는 결과를 제공하는 명령이 실행되도록 프로그램 작성 - 이벤트 프로그램

🐧이벤트 처리 프로그램 작성 방법

  1. 컴퍼넌트와 컨테이너 관련 클래스를 이용하여 디자인 클래스 작성 - UI 구현
    → Frame 클래스를 상속받아 작성
    → 컴퍼넌트 또는 컨테이너에서 다양한 이벤트 발생 - XXXEvent 클래스 : 이벤트 정보를 저장하기 위한 클래스
    → 이벤트 소스(Event Source) : 이벤트가 발생된 컴퍼넌트 또는 컨테이너
  2. 이벤트 소스에서 발생된 이벤트를 처리하기 위한 클래스 작성
    → 이벤트를 처리하기 위한 리스너 인터페이스를 상속받아 작성 - XXXEvent >> XXXListener
    ex) ActionEvent를 처리하기 위해서는 ActionListener 인터페이스를 상속받아 이벤트 처리
    → 리스너 인터페이스에는 컴퍼넌트(컨테이너)에서 발생되는 이벤트를 처리하기 위한 이벤트처리 메소드가 추상메소드로 선언되어 있으며 자식클래스에서 오버라이드 선언하여 이벤트 처리 명령 작성
  3. 이벤트 소스에서 이벤트가 발생될 경우 이벤트 처리 클래스가 객체로 생성되어 이벤트 처리 메소드가 호출되어 이벤트 처리 명령이 실행되도록 설정
    → 이벤트 소스에서 이벤트 발생되면 이벤트 처리 클래스의 객체가 생성되도록 메소드 호출
    형식) Component.addXXXListener(Listener l)
    → 이벤트 처리 클래스의 객체가 자동으로 이벤트 처리 메소드를 호출하여 이벤트 호출
package xyz.itwill.awt;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EventHandleApp extends Frame{

	private static final long serialVersionUID = 1L;
	
	public EventHandleApp(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		
		setLayout(new FlowLayout());
		
		//버튼을 누른 경우 ActionEvent 발생
		Button exit=new Button("Exit");//이벤트 소스
		
		add(exit);
		
		//이벤트 처리 객체 등록 - 이벤트가 발생될 경우 이벤트 처리 메소드 자동 호출
		exit.addActionListener(new EventHandle());
		
		setBounds(800,200,300,300);
		setVisible(true);
	}
	public static void main(String[] args) {
		new EventHandleApp("EventHandle");
	}
}

//이벤트 처리 기능을 제공하기 위한 클래스 - 리스너 인터페이스를 상속받아 작성
class EventHandle implements ActionListener {
	
	@Override
	public void actionPerformed(ActionEvent e) {//actionPerformed 무조건 오버라이드 선언
		// TODO Auto-generated method stub
		System.exit(0);//프로그램 종료
	}
	
}
package xyz.itwill.awt;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//디자인 클래스와 이벤트 처리 클래스를 하나의 클래스로 통합하여 작성
public class EventSourceHandleApp extends Frame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public EventSourceHandleApp(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		
		setLayout(new FlowLayout());
		Button exit=new Button("EXIT");
		add(exit);
		
		//this 키워드를 사용하여 이벤트 처리 객체 등록
		exit.addActionListener(this);
		
		setBounds(800,200,300,300);
		setVisible(true);
	}
	public static void main(String[] args) {
		new EventSourceHandleApp("EventSourceHandle");
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

}
package xyz.itwill.awt;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//디자인 클래스 내부에 이벤트 처리 클래스를 선언 - 중첩 클래스
public class EventInnerHandleApp extends Frame {

	private static final long serialVersionUID = 1L;
	
	public EventInnerHandleApp(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		
		setLayout(new FlowLayout());
		Button exit=new Button("EXIT");
		add(exit);
		
		//외부클래스에서는 내부클래스를 사용하여 객체 생성 가능
		exit.addActionListener(new EventHandle());
		
		setBounds(800,200,300,300);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new EventInnerHandleApp("EventInnerHandle");
	}
	
	//내부클래스는 외부클래스의 필드와 메소드를 접근제한자에 상관없이 사용 가능
	public class EventHandle implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			System.exit(0);
		}
	}
}
package xyz.itwill.awt;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class EventAnnonymousHandleApp extends Frame{

	private static final long serialVersionUID = 1L;
	
	public EventAnnonymousHandleApp(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		
		setLayout(new FlowLayout());
		Button exit=new Button("EXIT");
		add(exit);
		
		//리스너 인터페이스를 상속받은 익명의 클래스를이용하여 이벤트 처리 객체 등록
		exit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.exit(0);
			}
		});
		
		setBounds(800,200,300,300);
		setVisible(true);
	}
}

0개의 댓글