유수봉 교수의 자바프로그램 14주차 Event, Event Listener, 가상키코드

JAVA에서 Event 란?

  • 자바에서 이벤트(Event)란 이벤트의 발생에 의해 프로그램 실행 흐름이 결정되는 방식의 프로그래밍 패러다임을 말하며 이벤트의 종류로는 사용자의 입력(마우스 드래그, 마우스 클릭, 키보드 누름 등), 센서로부터의 입력, 네트워크로부터 데이터 송수신, 다른 응용프로그램이나 다른 스레드로부터의 메시지를 통해서 이벤트가 발생하며 이벤트의 발생에 의해 프로그램 흐림이 발생되는 방식 즉, 이벤트가 발생하면 이벤트를 처리하는 루틴(이벤트 리스너)실행과 프로그램 내의 어떤 코드가 언제 실행될지 이벤트 발생에 의해 전적으로 결정되는 방식으로 나누어진다.

Event Listener란?

  • 이벤트 리스너(Event Listener)란 이벤트를 처리하는 자바 프로그램 코드이며 클래스로 만든다. 이러한 이벤트 리스너는 JDK에서 이벤트 리스너 작성을 위한 인터페이스를 제공하며 개발자가 리스너 인터페이스의 추상 메소드를 구현한다.(이벤트가 발생하면 자바 플랫폼은 리스터 인터페이스의 추상 메소드를 호출한다.)

이벤트 리스너 예제

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class IndepClassListener extends JFrame {

	public IndepClassListener() {

		setTitle("Action 이벤트 리스너 예제");
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		
		Container c = getContentPane();
		
		c.setLayout(new FlowLayout());
		
		JButton btn = new JButton("Action");
		
		btn.addActionListener(new MyActionListener()); // Action 이벤트 리스너 달기
		
		c.add(btn);
		
		setSize(350, 150);
		setVisible(true);
	
	}

	public static void main(String [] args) {
	
		new IndepClassListener();
	
	}

} 

// 독립된 클래스로 이벤트 리스너를 작성한다.
class MyActionListener implements ActionListener {

	public void actionPerformed(ActionEvent e) {
	
		JButton b = (JButton)e.getSource(); 
	
		if(b.getText().equals("Action")) 
	
	
			b.setText(" "); 
		
		else
	
			b.setText("Action"); 
	
	}

}

실행 결과

가상 키코드란?

  • 가상키코드란 시스템에 장착된 키보드의 종류에 관계없이 키를 입력받기 위해 만들어진 범용적인 코드이며, 자바에서 가상키는 유니코드 키든 아니든 모든 키에 자바의 가상 키 코드가 정의되어 있다.
// 다양한 KeyEvent 와 KeyListener 를 활용하는 프로그램
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class KeyListenerEx extends JFrame {

	private JLabel [] keyMessage; // 3개의 메시지를 출력할 레이블 컴포넌트 배열
	
	public KeyListenerEx() {

		setTitle("keyListener 예제");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c = getContentPane();

		c.setLayout(new FlowLayout());
		c.addKeyListener(new MyKeyListener()); 
		
		// 레이블 배열을 3개 생성하고 각 레이블 컴포넌트 생성
		keyMessage = new JLabel [3]; // 레이블 배열 생성

		keyMessage[0] = new JLabel(" getKeyCode()  ");
		keyMessage[1] = new JLabel(" getKeyChar()  ");
		keyMessage[2] = new JLabel(" getKeyText()  ");
		
		// 3개의 레이블 컴포넌트를 컨텐트팬에 부착
		for(int i=0; i<keyMessage.length; i++) {

			c.add(keyMessage[i]);

			keyMessage[i].setOpaque(true); // 배경색이 보이록 불투명 속성 설정
			keyMessage[i].setBackground(Color.YELLOW); // 배경색을 CYAN 색으로 변경
		
		}
		
		setSize(300,150);

		setVisible(true);
		
		// 컨텐트팬이 키 입력을 받을 수 있도록 포커스 강제 지정
		c.setFocusable(true);
		c.requestFocus();
	
	}
	
	// Key 리스너 구현
	class MyKeyListener extends KeyAdapter {

		public void keyPressed(KeyEvent e) {
		
			int keyCode = e.getKeyCode(); // 키 코드 알아내기
		
			char keyChar = e.getKeyChar(); // 키 문자 값 알아내기
		
			keyMessage[0].setText(Integer.toString(keyCode)); // 키 코드 출력
			keyMessage[1].setText(Character.toString(keyChar)); // 키 문자 출력
			keyMessage[2].setText(KeyEvent.getKeyText(keyCode)); // 키 이름 문자 출력
		
			System.out.println("KeyPressed"); // 콘솔창에 메소드 이름 출력
		
		}
		
		public void keyReleased(KeyEvent e) {
		
			System.out.println("KeyReleased"); // 콘솔창에 메소드 이름 출력
		
		}
		
		public void keyTyped(KeyEvent e) {
		
			System.out.println("KeyTyped"); // 콘솔창에 메소드 이름 출력
		
		}
	
	}
	
	public static void main(String [] args) {
	
		new KeyListenerEx();
	
	}

}
  • 실행 결과

좋은 웹페이지 즐겨찾기