각진 세상에 둥근 춤을 추자

[Java] Swing - 이벤트 본문

Java

[Java] Swing - 이벤트

circle.j 2022. 10. 24. 12:57

 

 

 

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

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

 

이벤트 (Event)

  • 컨트롤러와 사용자 간의 수 많은 상호작용을 말한다. 
  • 종류: 사용자의 입력(마우스 드래그, 클릭, 키보드), 센서 입력, 데이터 송수신 등 

 

이벤트 핸들러 (Event Handler, Event Listener)

  • 사용자의 특정 동작에따라 처리되는 이벤트 메서드를 말한다. 
  • 클래스로 작성해야 한다.
// 이벤트 리스너 등록 메서드
Component.addXXXListener(listener)

Componenet.addMouseListener()
Componenet.addActionListener()

 

 

이벤트 처리 순서

  1. 이벤트 발생 ( ex. 마우스, 키보드 입력 등)
  2. 이벤트 객체 생성 (발생한 이벤트에 대한 정보를 가진 객체)
  3. 이벤트 리스너 찾기
  4. 이벤트 리스너 호출 
  5. 이벤트 리스너 실행 

 

 

 

이벤트 객체 및 소스의 종류

 

 

 

[예제1] ActionListener (어려운 방법)

package event;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.Border;

public class ActionEvent_ex extends JFrame{
	
	public ActionEvent_ex(String title, int width, int height) {
		setTitle(title);
		setSize(width, height);
		setLocation(2500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 레이아웃 
		setLayout(new FlowLayout());
		
		// 컴포넌트 추가
		JButton btn = new JButton("Action");
		MyActionListener listener = new MyActionListener();
		btn.addActionListener(listener);
		add(btn);
		
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new ActionEvent_ex("Action Event example", 300, 200);
	}
	
}

class MyActionListener implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton b = (JButton) e.getSource();
		String n =b.getText();
		if(n.equals("Action")) {
			b.setText("액션!");
		}else {
			b.setText("Action");
		}
	}
	
}

 

 

[예제2] ActionListener (보편적인 방법)

package event;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.Border;

public class MyActionEvent extends JFrame implements ActionListener {
	
	// btn: 멤버변수
	public JButton btn;
	
	public MyActionEvent(String title, int width, int height) {
		setTitle(title);
		setSize(width, height);
		setLocation(2500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 레이아웃 
		setLayout(new FlowLayout());
		
		// 컴포넌트 추가
		// btn: 지역변수
		btn = new JButton("Action");
		btn.addActionListener(this);
		add(btn);
		
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new MyActionEvent("Action Event example", 300, 200);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		
		if(obj == btn) {
			System.out.println(btn.getText());
		}
	}
	
}