본문 바로가기

자바공부

자바 이벤트 리스너, 명품자바프로그래밍10장

728x90
반응형

* 자바의 AWT와 스윙 패키지는 사용자가 이벤트 리스너를 작성할 수 있도록 이벤트 리스너 인터페이스(interface)를 제공한다.

자바는 사용자가 바로 사용할 수 있는 이벤트 리스너를 제공하지 않기 때문에, 스스로 필요한 이벤트 리스너를 작성하여야 한다.

리스너 인터페이스의 추상 메소드를 모두 구현하여 이벤트 리스너를 완성하여야 한다.

interface ActionListener{
	public void actionPerformed(ActionEvent e); // Action 이벤트 발생 처리
}

interface MouseListener{
	public void mousePressed(MouseEvent e);	// 마우스 버튼이 눌러지는 순간
    public void mouseReleased(MouseEvent e);	// 눌러진 마우스 버튼이 떼어지는 순간
    public void mouseClicked(MouseEvent e);	// 마우스가 클릭되는 순간
    public void mouseEntered(MouseEvent e);	// 마우스가 컴포넌트 위에 올라가는 순간
    public void mouseExited(MouseEvent e);	// 마우스가 컴포넌트 위에서 내려오는 순간
}

 

* 리스터 인터페이스는 java.awt.event 패키지에 구현되어 있으므로 이벤트 리스너를 작성하기 위해서는 import 문을 삽입해야 한다.

import java.awt.event.*;

 

* 개발자는 이벤트 리스너를 구현하기 위해 자바의 리스너 인터페이스를 상속받고 리스너 내의 모든 메소드를 구현하여야 한다.

* 이벤트가 발생하는 각 경우에 따라 서로 다른 메소드가 호출되므로 이들 사이의 관계를 숙지해야 한다.

 

* 이벤트 리스너 인터페이스

이벤트 종류 리스너 인터페이스 리스너 추상 메소드 메소드가 호출되는 경우
Action ActionListener void actionPerformed(ActionEvent) Action 이벤트가 발생하는 경우
Item ItemListener void itemStateChanged(ItemEvenr) Item 이벤트가 발생하는 경우
Key KeyListener void keyPressed(KeyEvent) 모든 키에 대해 키가 눌러졌을 때
void keyReleased(KeyEvent) 모든 키에 대해 눌러진 키가 떼어질 때
void keyTyped(KeyEvent) 유니코드 키가 입력될 때
Mouse MouseListener void mousePressed(MouseEvent) 마우스 버튼이 눌러질 때
void mouseReleased(MouseEvent) 눌러진 마우스 버튼이 떼어질 때
void mouseClicked(MouseEvent) 마우스 버튼이 클릭될 때
void mouseEntered(MouseEvent) 마우스가 컴포넌트 위에 올라올 때
void mouseExited(MouseEvent) 컴포넌트 위에 올라온 마우스가 컴포넌트를 벗어날 때
Focus FocusListener void focusGained(FocusEvent) 컴포넌트가 포커스를 받을 때
void focusLost(FocusEvent) 컴포넌트가 포커스를 잃을 때
Text TextListener void textValueChanged(TextEvent) 텍스트가 변경될 때
Window WindowListener void windowOpened(WindowEvent) 윈도우가 생성되어 처음으로 보이게 될 때
void windowClosing(WindowEvent) 윈도우의 시스템 메뉴에서 윈도우 닫기를 시도할 때
void windowIconfied(WindowEvent) 윈도우가 아이콘화될 때
void windowDeiconfied(WindowEvent) 아이콘 상태에서 원래 상태로 복귀할 때
void windowClosed(WindowEvent) 윈도우가 닫혔을 때
void windowActivated(WindowEvent) 윈도우가 활성화될 때
void windowDeactivated(WindowEvent) 윈도우가 비활성화될 때
Adjustment AdjustmentListener void adjustmentValueChanged(AdjustmentEvent) 스크롤바가 움직일 때
Component ComponentListener void componentHidden(Component Event) 컴포넌트가 보이지 않는 상태로 될 때
void componentShown(Component Event) 컴포넌트가 보이는 상태로 될 때
void componentResized(Component Event) 컴포넌트의 크기가 변경될 때
void componentMoved(Component Event) 컴포넌트의 위치가 변경될 때
Container ContainerListener void componentAdded(Component Event) 컴포넌트가 컨테이너에 추가될 때
void componentRemoved(Component Event) 컴포넌트가 컨테이너에서 삭제될 때

 

* JButton 컴포넌트에 ActionListener를 구현한 사례

package Ch1001ex;

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

public class ListenerSample extends JFrame{
	ListenerSample(){
		setTitle("Action 이벤트 리스너 작성");
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 버튼 컴포넌트를 생성하고 ActionListener를 단다.
		JButton btn = new JButton("Action");
		MyActionListener listener = new MyActionListener();
		btn.addActionListener(listener);
		
		add(btn);
		
		setSize(300,150);
		btn.setOpaque(true);
		setVisible(true);
		
	}
	public static void main(String[] args) {
		new ListenerSample();
	}
	
	// ActionListener을 상속받아 Action 리스너를 작성한다.
	class MyActionListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			JButton b = (JButton)e.getSource(); // 선택된 버튼을 알아낸다.
			
			// 버튼의 문자열이 "Action"이면 "액션"으로, 아니면 다시 "Action"으로 변경한다.
			if(b.getText().equals("Action"))
				b.setText("액션");
			else
				b.setText("Action");
			
		}
	}
}

* 이벤트 리스너가 컴포넌트에 등록된 경우에만 이벤트 처리가 가능하다.

반응형