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");
}
}
}
* 이벤트 리스너가 컴포넌트에 등록된 경우에만 이벤트 처리가 가능하다.
반응형
'자바공부' 카테고리의 다른 글
자바 어댑터 클래스(Adapter), 명품자바프로그래밍10장 (0) | 2022.07.25 |
---|---|
자바 이벤트 리스너 작성 방법, 명품자바프로그래밍10장 (0) | 2022.07.25 |
자바 이벤트 처리, 명품자바프로그래밍10장 (0) | 2022.07.25 |
자바 배치관리자 없는 컨테이너, 명품자바프로그래밍9장 (0) | 2022.07.24 |
자바 GridLayout 배치관리자, 명품자바프로그램9장 (0) | 2022.07.24 |