이벤트 기반 프로그래밍
이벤트 기반의 응용프로그램은 각 이벤트를 처리하는 이벤트 리스너(event listener)들을 보유하며, 이벤트가 발생할 때마다 리스너가 실행된다.
이벤트는 키입려, 마우스 클릭, 마우스 드래그등 사용자의 액션으로 발생한다.
이벤트 객체란?
이벤트 객체는 현재 발생한 이벤트에 관한 정보를 가진 객체이며, 이벤트 리스너에게 전달된다. 모든 이벤트 객체들은 java.util.EventObject 클래스를 상속받으며, java.awt.event와 javax.swing.event 패키지에 구현되어 있다. 응용프로그램은 이벤트를 처리하기 위해 반드시 import 문을 포함해야 한다.
import java.awt.event.*; // 이벤트 처리가 필요한 모든 소스에 포함 import javax.swing.event.*; // 스윙 이벤트를 다루는 경우에 추가 포함 |
getSource( )는 현재 발생한 이벤트의 소스 컴포넌트의 레퍼런스를 정보를 리턴한다.
예] 버튼클릭시 이름바꾸기
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")) // 버튼의문자열이"Action"인지비교 b.setText("액션"); // 버튼의문자열을"액션"으로변경 else b.setText("Action"); //버튼의문자열을"Action"으로변경 } } |
실행결과]
리스너 인터페이스
이벤트 리스너란 이벤트를 처리하는 자바 프로그램 코드로서 클래스로 만든다. JDK는 이벤트 리스너 인터페이스를 제공하며, 개발자는 이 인터페이스를 상속받고 추상 메소드를 모두 구현하여 이벤트 리스너를 작성한다.
이벤트가 발생하는 각 경우에 따라 어떤 메소드가 호출되는지 숙지하는 것이 꼭 필요하다.
이벤트 |
인터페이스 |
메서드 |
호출시기 |
Action |
ActionListener |
void actionPeformed(ActonEvent ae) |
Button을 클릭했을 때, Menu를 클릭했을때, TextField에서 Enter키를 눌렀을 때, List의 item하나를 선택하여 더블클릭했을 때 |
Component |
ComponentListener |
void componentMoved(ActonEvent ae) |
컴포넌트가 이동되었을 때 |
void componentHidden(ActonEvent ae) |
컴포넌트가 화면에 보이지 않게 되었을 때 |
||
void componentResized(ActonEvent ae) |
컴포넌트의 크기가 변경되었을 때 |
||
void componentShown(ActonEvent ae) |
컴포넌트가 화면에 보여 질 때 |
||
Mouse |
MouseMotionListener |
void mouseDragged(MouseEvent me) |
마우스 버튼을 누른 채로 마우스를 움직였을 때 |
void mouseMoved(MouseEvent me) |
마우스 포인터를 이동시킬 때 |
||
MouseListener |
void mousePressed(MouseEvent me) |
마우스 버튼을 눌렀을 때 |
|
void mouseReleased(MouseEvent me) |
마우스 버튼을 떼었을 때 |
||
void mouseEntered(MouseEvent me) |
마우스 포인터가 이벤트 소스의 영역 안으로 들어왔을 때 |
||
void mouseExited(MouseEvent me) |
마우스 포인터가 이벤트 소스의 영역 안에서 밖으로 이동할 때 |
||
void mouseClicked(MouseEvent me) |
마우스 버튼을 눌렀다가 떼었을 때 |
||
MouseWheel |
MouseWheelListener |
void mouseWheelMoved(MouseWheelEvent e) |
마우스의 휠을 움직였을 때 |
KeyEvent |
KeyListener |
void keyPressed(KeyEvent ke) |
키보드의 키를 눌렀을 때 |
void keyReleased(KeyEvent ke) |
키보드의 키를 떼었을 때 |
||
void KeyTyped(KeyEvent ke) |
키보드의 키를 눌렀다 떼었을 때 |
||
TextEvent |
TextListener |
void textValueChanged(TextEvent te) |
TextField 또는 TestArea의 내용이 변경되었을 때 |
FocusEvent |
FocusListener |
void focusGained(FocusEvent fe) |
이벤트 소스로 focus가 이동했을 때 |
void focusLost(FocusEvent fe) |
이벤트 소스가 갖고 있던 focus가 다른 컴포넌트로 이동했을 때 |
||
Item |
ItemListener |
void itemStateChanged(ItemEvent ie) |
Checkbox, CheckboxItem, List, Choice의 status가 변경되었을 때(selected <-> unselected) |
Adjustment |
AdjustmentListener |
void adjustmentValueChanged(AdjustmentEvent ae) |
Scrollbar의 값이 변경되었을 때 |
Window |
WindowListener |
void windowClosing(WindowEvent we) |
윈도우가 열렸을 때 |
void windowOpened(WindowEvent we) |
윈도우가 닫힐 때(닫기 버튼을 눌렀을 때) |
||
void windowIconified(WindowEvent we) |
윈도우가 닫혔을 때(dispose()가 호출 되었을 때 |
||
void windowDeiconified(WindowEvent we) |
윈도우가 최소화(아이콘화) 되었을때 |
||
void windowClosed(WindowEvent we) |
윈도우가 최소화 상태에서 다시 원래 크기로 되었을 때 |
||
void windowActivated(WindowEvent we) |
윈도우가 활성화 되었을 때 |
||
void windowDeactivated(WindowEvent we) |
윈도우 비활성화 되었을 때 |
||
windowFocusListener |
void windowGainedFocus(WindowEvent e) |
윈도우가 포커스를 얻을 때 |
|
void windowLostFocus(WindowEvent e) |
윈도우가 포커스를 잃었을 때 |
||
WindowStateListener |
void windowStateChanged(WindowEvent e) |
윈도우의 상태가 변했을 때 |
|
Container |
ContainerListener |
void componentAdded(ContainerEvent ce) |
컴포넌트가 컨테이너에 추가될 때 |
void componentRemoved(ContainerEvent ce) |
컴포넌트가 컨테이너에서 삭제될 때 |
'프로그램언어 > 자바' 카테고리의 다른 글
이벤트 리스너 예제2 (0) | 2020.11.03 |
---|---|
이벤트 리스너 예제1 (0) | 2020.11.03 |
GUI문제1 (0) | 2020.11.02 |
컨테이너와 배치 (0) | 2020.11.02 |
AWT와 스윙(Swing) (0) | 2020.11.01 |