JAVA 그래 픽 인터페이스 (GUI) 의 이벤트 처리 메커니즘

이전 몇 편의 블 로그 에서 우 리 는 예 시 를 작 성 했 지만 이런 예 시 는 독자 와 상호작용 을 하지 못 했다. 독자 가 도형 인터페이스 에 관심 이 있 는 이 유 는 바로 도형 인터페이스 와 독자 의 상호작용 능력 이 강하 기 때문이다.그러나 단순 한 인 터 페 이 스 는 사용 가치 가 없다. 만약 에 도형 인터페이스 가 독자 와 교류 할 수 있다 면 자바 의 사건 처리 메커니즘 을 이해 해 야 한다.우선 구성 요 소 는 이벤트 프로 세 서 를 등록 해 야 합 니 다. 독자 가 구성 요 소 를 클릭 하거나 마 우 스 를 이동 하거나 키 보드 를 두 드 리 면 이벤트 (Event) 가 발생 합 니 다.이벤트 가 발생 하면 프로그램 이 이 이벤트 에 대한 응답 을 합 니 다. 이 구성 요소 들 은 이벤트 소스 (Event Source) 입 니 다.사건 을 받 아들 이 고 해석 하 며 처리 하 며 독자 와 의 상호작용 을 실현 하 는 방법 을 이벤트 프로세서 (Event Handler) 라 고 한다.그들 사이 의 업무 관 계 는 그림 과 같다.
Created with Rapha ë l 2.1.0 외부 역할 이벤트 원본 등 록 된 이벤트 프로세서
이벤트 소스 는 다양한 유형의 사건 을 만 들 수 있 고 다양한 유형의 사건 감청 기 를 등록 할 수 있 습 니 다.구성 요소 에 어떤 이벤트 가 발생 하면 해당 이벤트 대상 을 생 성 합 니 다. 이 대상 에는 이 이벤트 와 관련 된 각종 정보 가 포함 되 어 있 습 니 다.이 대상 은 상응하는 등 록 된 이벤트 프로세서 로 전달 되 었 는데, 이때 이벤트 처리 방법 이 실행 되 었 다.
이벤트 모니터
사건 감청 기 는 라 이브 러 리 의 인터페이스 로 모든 사건 류 는 이러한 사건 대상 을 감청 하 는 인터페이스 가 있다.인터페이스 에서 이 사건 을 처리 하 는 추상 적 인 방법 을 정의 했다.인 터 페 이 스 는 추상 적 인 정의 일 뿐 사용 하려 면 반드시 실현 해 야 한다.그래서 매번 사건 을 처리 하 는 것 은 대응 하 는 인터페이스의 실현 클래스 를 호출 하 는 방법 이다.이벤트 원본 에 이벤트 가 발생 하고 이벤트 대상 을 생 성 할 때 이 대상 은 이벤트 프로세서 로 보 내 집 니 다. 프로세서 호출 인터페이스 구현 클래스 대상 에 해당 하 는 방법 으로 이 사건 을 처리 합 니 다.해당 이벤트 모니터 를 시작 하려 면 프로그램 에 등록 해 야 합 니 다.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

/** *         * * @author jianggujin * */
public class EventDemo extends JFrame {
   public EventDemo()
   {
      super("EventDemo");
      JButton btn1 = new JButton("  1");
      //      
      btn1.addActionListener(new ButtonClick());
      add(btn1);
      setSize(300, 300);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);
   }

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

/** *         * * @author jianggujin * */
class ButtonClick implements ActionListener
{

   @Override
   public void actionPerformed(ActionEvent e)
   {
      //      
      Object obj = e.getSource();
      //        
      if (obj instanceof JButton)
      {
         JButton srcBtn = (JButton) obj;
         System.out.println("      :" + srcBtn.getText());
      }
      else
      {
         System.out.println("     ");
      }
   }
}

단 추 를 누 르 면 이벤트 대상 을 생 성 합 니 다. 대상 에는 이벤트 원본 (단추) 의 정 보 를 등 록 된 이벤트 모니터 로 전송 하고 모니터 는 해당 방법 을 호출 하여 대상 을 전송 합 니 다.
이벤트 종류
JAVA 가 이벤트 응답 을 처리 하 는 클래스 와 감청 인 터 페 이 스 는 대부분 AWT 패키지 에 있 습 니 다.패키지 에는 스윙 구성 요소 에 사용 되 는 이벤트 클래스 와 감청 인터페이스 가 있 습 니 다.AWT 사건 류 는 AWT Event 에서 계승 되 고 그들의 초 류 는 EventObject 이다.AWT 사건 에서 사건 은 저급 사건 과 의미 사건 으로 나 뉜 다.의미 사건 은 일부 저급 사건 에 대한 추상 적 인 요약 으로 단일 또는 여러 개의 저급 사건 의 특정한 특례 의 집합 이다.자주 사용 되 는 저급 사건 은:
이벤트
설명 하 다.
KeyEvent
버튼 을 누 르 고 놓 으 면 이 이벤트 가 발생 합 니 다.
MouseEvent
마우스 누 르 기, 놓 기, 드래그, 이동
FocusEvent
구성 요소 가 초점 을 잃 어 이 이벤트 가 발생 합 니 다.
WindowEvent
창 이 바 뀌 었 습 니 다. 이 이벤트 가 발생 했 습 니 다.
상용 의미 이벤트:
이벤트
설명 하 다.
ActionEvent
단 추 를 누 르 거나 메뉴 를 선택 하거나 텍스트 상자 에서 차 를 되 돌려 주 는 등 이벤트 가 발생 합 니 다.
ItemEvent
다 중 선택 상자, 선택 단 추 를 선택 하거나 목록 을 누 르 면 이 이벤트 가 발생 합 니 다.
일반적인 이벤트 와 이벤트 모니터 는 다음 과 같 습 니 다.
이벤트 종류
대응 하 는 모니터
모니터 인터페이스 의 추상 적 인 방법
Action
ActionListener
actionPerformed(ActionEvent e)
Mouse
MouseListener
mouseClicked(MouseEvent e)、mouseEntered(MouseEvent e)、mouseExited(MouseEvent e)、mousePressed(MouseEvent e)、mouseReleased(MouseEvent e)
MouseMotion
MouseMotionListener
mouseDragged(MouseEvent e)、mouseMoved(MouseEvent e)
Item
ItemListener
itemStateChanged(ItemEvent e)
Key
KeyListener
keyPressed(KeyEvent e)、keyReleased(KeyEvent e)、keyTyped(KeyEvent e)
Focus
FocusListener
focusGained(FocusEvent e)、focusLost(FocusEvent e)
Window
WindowListener
windowActivated(WindowEvent e)、windowClosed(WindowEvent e)、windowClosing(WindowEvent e)、windowDeactivated(WindowEvent e)、windowDeiconified(WindowEvent e)、windowIconified(WindowEvent e)、windowOpened(WindowEvent e)
Component
ComponentListener
componentHidden(ComponentEvent e)、componentMoved(ComponentEvent e)、componentResized(ComponentEvent e)、componentShown(ComponentEvent e)
Text
TextListener
textValueChanged(TextEvent e)
이벤트 어댑터
이벤트 어댑터 는 사실 인터페이스의 실현 클래스 입 니 다. 실제 어댑터 류 는 감청 인터페이스 방법 중의 방법 을 모두 비 우 는 방법 일 뿐 입 니 다.이렇게 하면 이벤트 감청 기 를 정의 할 때 이 실현 클래스 를 계승 하고 필요 한 방법 을 다시 쓸 수 있 으 며 모든 방법 을 덮어 쓸 필요 가 없다.자주 사용 하 는 이벤트 어댑터 클래스 는 다음 과 같 습 니 다.
어댑터
설명 하 다.
MouseAdapter
마우스 이벤트 어댑터
WindowAdapter
창 이벤트 어댑터
KeyAdapter
키보드 이벤트 어댑터
FocusAdapter
포커 스 어댑터
MouseMotionAdapter
마우스 이동 이벤트 어댑터
ComponentAdapter
모듈 소스 어댑터
ContainerAdapter
용기 원본 이벤트 어댑터

좋은 웹페이지 즐겨찾기