[Java] 이벤트 처리

PYOUNANI·2022년 11월 18일
0

Java

목록 보기
14/14
post-thumbnail

이벤트 처리

이벤트 처리


이벤트 기반 프로그래밍

이벤트 발생에 의해 프로그램 흐름이 결정되는 방식의 프로그램 패러다임이다.

  • 이벤트
    사용자의 입력, 네트워크로부터 데이터 송수신 등

  • 이벤트 기반 프로그래밍
    어떤 사건에 따라 제어 흐름이 결정되어 동작을 처리

이벤트 처리 구조

이벤트 소스마다 이벤트 리스너와 연결

  • 이벤트 소스(Event Source) 객체
    이벤트를 발생시킨 컴포넌트 객체

  • 이벤트 리스너(Event Listener) 객체
    이벤트 소스에서 발생한 이벤트를 처리하는 객체

  • 이벤트 핸들러(Event Handler) 메서드
    전달된 이벤트를 처리하는 메서드

    이벤트 처리 과정

  1. 이벤트 소스에서 이벤트가 발생
  2. 이벤트 객체를 생성
  3. 이벤트 소스에 연관된 리스너에 이벤트 객체를 전달
  4. 이벤트 리스너의 이벤트 핸들러 메서드를 실행

이벤트 처리

이벤트 처리 방법


  1. 이벤트 소스 결정
    이벤트(ED)를 발생시킬 컴포넌트(CD) 결정

  2. 이벤트 리스너 구현
    이벤트(ED)를 처리할 객체의 클래스를 이벤트 리스너 인터페이스로 구현

  3. 이벤트 소스와 이벤트 리스너 연결
    addXXXListener() 메서드를 통해 CD 에 이벤트리스너를 연결

리스너 생성 방법

이벤트를 처리하는 다양한 방법들이 있으나 4번 5번을 사용하는 것을 추천한다.
1. 현재 클래스 사용
2. 일반 클래스 사용
3. 내부 클래스 사용
4. 익명 내부 클래스 사용
5. 익명 내부 클래스 임시 객체 사용

  1. 익명 내부 클래스 사용
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Listener4 implements ActionListener {
	
	private JFrame frame;
	private JTextField text;
	private JLabel label;
	
	public Listener4() {
		frame = new JFrame("Listener");
		
		buildGUI();
		
		frame.setSize(200, 80);
		frame.setLocation(500, 300);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	public void buildGUI() {
		text = new JTextField();
		JButton button = new JButton("확인");
		button.addActionListener(handler);
		
		label = new JLabel("HELLO");
		
		frame.add(text, BorderLayout.CENTER);
		frame.add(button, BorderLayout.EAST);
		frame.add(label, BorderLayout.SOUTH);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String name = text.getText();
		label.setText(name);
		// TODO Auto-generated method stub
		
	}
	
	private ActionListener handler = new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			String name = text.getText();
			label.setText(name);
		}
	};

}
  1. 익명 내부 클래스 임시 객체 사용
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Listener5 implements ActionListener {
	
	private JFrame frame;
	private JTextField text;
	private JLabel label;
	
	public Listener5() {
		frame = new JFrame("Listener");
		
		buildGUI();
		
		frame.setSize(200, 80);
		frame.setLocation(500, 300);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	public void buildGUI() {
		text = new JTextField();
		JButton button = new JButton("확인");
		label = new JLabel("HELLO");
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String name = text.getText();
				label.setText(" ");
			}
		});
		
		
		
		frame.add(text, BorderLayout.CENTER);
		frame.add(button, BorderLayout.EAST);
		frame.add(label, BorderLayout.SOUTH);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String name = text.getText();
		label.setText(name);
		// TODO Auto-generated method stub
		
	}

}

0개의 댓글