자바 의 사건 감청 메커니즘 을 상세히 이야기 하 다.

마우스 이벤트 감청 메커니즘 의 세 가지 측면:
1.이벤트 원본 대상:
이벤트 소스 대상 은 동작 을 할 수 있 는 대상 입 니 다.자바 언어 에서 모든 용기 구성 요소 와 요소 구성 요 소 는 이벤트 감청 의 이벤트 원본 대상 입 니 다.자바 에 서 는 이벤트 의 동작 에 따라 이벤트 원본 대상 을 구분 합 니 다.동작 이 어느 구성 요소 에서 발생 하 는 지,이 구성 요 소 는 이벤트 원본 대상 입 니 다.
2.사건 감청 방법:
addMouseListener(MouseListener ml) ;이 방법 은 주로 마우스 의 방출 을 포착 하고 누 르 고 클릭 하 며 들 어가 고 떠 나 는 동작 에 사용 된다.해당 동작 을 캡 처 한 후 이벤트 처리 클래스(Mouse Listener 인터페이스 구현)에 맡 깁 니 다.
addActionListener(ActionListener al);유사 한 단추 구성 요소 의 마우스 클릭 동작 이나 입력 상자 구성 요소 의 키보드 리 턴 동작 을 캡 처 합 니 다.그 다음 에 동작 과 관련 정 보 를 이벤트 처리 류(Action Listener 인터페이스 실현)의 해당 방법 으로 처리 합 니 다.
addMouseMotionListener(MouseMotionListener mml);마우스 의 이동 과 드래그 동작 포착 하기;그 다음 에 동작 과 관련 정 보 를 이벤트 처리 류(Mouse Motion Listener 인터페이스 실현)의 해당 방법 으로 처리 합 니 다.
addKeyListener(KeyListener kl);이벤트 원본 대상 의 키보드 버튼 을 누 르 고 놓 고 두 드 리 는 동작 을 캡 처 합 니 다.그 다음 에 동작 과 관련 정 보 를 이벤트 처리 류(KeyListener 인터페이스 실현)의 해당 방법 으로 처리 합 니 다.
3.이벤트 인터페이스(이벤트 처리 클래스,즉 이벤트 인터페이스의 클래스):
Mouse Listener 마우스 이벤트 인터페이스,누 르 고 놓 고 클릭 하고 들 어가 고 떠 나 는 이벤트 처리 방법 이 있 습 니 다.
Action Listener 동작 이벤트 인터페이스,동작 에 대응 하 는 이벤트 처리 방법 이 있 습 니 다.
MouseMotionListener    마우스 이동 이벤트 인터페이스,이동 및 드래그 이벤트 처리 방법 이 있 습 니 다.
KeyLisetener       키보드 이벤트 인터페이스,방출,누 르 고 두 드 리 는 이벤트 처리 방법 이 있 습 니 다.
사건 감청 의 세 가지 측면 을 알 게 된 후에 우 리 는 구성 요소 에 사건 의 감청 을 추가 하 는 것 이 매우 쉽다.다음은 작은 예 입 니 다.
목표:간단 하고 간단 한 그래 픽 판 을 만 들 면 해당 하 는 기능 을 누 르 면 서로 다른 회화 목적 을 달성 할 수 있 습 니 다.
분석:  
1.그림 판 의 간단 한 인터페이스 가 필요 합 니 다.Draw 류 는 자바 의 Swing 구성 요 소 를 사용 하여 인터페이스 초기 화 를 정의 합 니 다.
2.그 다음 에 이벤트 인터페이스 Draw Listener 류 를 정의 하여 상기 인 터 페 이 스 를 실현 하고 인터페이스 에 있 는 방법 을 다시 써 서 자신의 목적 을 달성 하도록 한다.
3.Draw 에서 Draw Listener 류 의 대상 을 예화 합 니 다.
4.Draw 클래스 의 구성 요소 에 이벤트 감청 방법 을 추가 하고 이벤트 처리 클래스 를 Draw Listener 로 지정 합 니 다.
코드 구현:
Draw 클래스

package com.cbs;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * Draw ,        
 * 
 * @author CBS
 * 
 */
public class Draw {

  public static void main(String[] args) {
    Draw t = new Draw();
    t.showUI();

  }

  //        
  public void showUI() {
    JFrame jf = new JFrame();
    jf.setTitle("  ");
    jf.setSize(700, 700);
    jf.setDefaultCloseOperation(3);
    jf.setLocationRelativeTo(null);
    FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
    jf.setLayout(layout);
    JButton drawLine = new JButton("   ");
    jf.add(drawLine);
    JButton drawOval = new JButton("   ");
    jf.add(drawOval);
    JButton drawArc = new JButton("   ");
    jf.add(drawArc);
    JButton drawPolygon = new JButton("   ");
    jf.add(drawPolygon);
    JButton jb1 = new JButton();
    jb1.setBackground(Color.RED);
    jf.add(jb1);
    jb1.setPreferredSize(new Dimension(30, 30));
    JButton jb2 = new JButton();
    jb2.setBackground(Color.GREEN);
    jf.add(jb2);
    jb2.setPreferredSize(new Dimension(30, 30));

    jf.setVisible(true);

    Graphics g = jf.getGraphics();//        
    DrawListener dl = new DrawListener(g);//    DrawListener    
    jf.addMouseListener(dl);//              
    jf.addMouseMotionListener(dl);//                

    //          
    drawLine.addActionListener(dl);
    drawOval.addActionListener(dl);
    jb1.addActionListener(dl);
    jb2.addActionListener(dl);
    drawArc.addActionListener(dl);
    drawPolygon.addActionListener(dl);

  }

}
DrawListener 클래스

package com.cbs;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;

/**
 *      
 * 
 * @author CBS
 * 
 */

public class DrawListener implements MouseListener, MouseMotionListener,
    ActionListener {

  private int x1, y1, x2, y2;//            
  private Graphics g;//          
  private String str;//          ,       
  private Color color;//          
  private int f = 1;//     ,      

  public DrawListener(Graphics g) {
    this.g = g;
  }

  //          
  public void mousePressed(MouseEvent e) {
    //           ;   e  
    if (f == 1) {
      x1 = e.getX();
      y1 = e.getY();
    }
  }

  //          
  public void mouseClicked(MouseEvent e) {
    if ("   ".equals(str)) {
      System.out.println("sanjaioxing");
      int x, y;
      x = e.getX();
      y = e.getY();
      g.setColor(color);
      g.drawLine(x, y, x1, y1);
      g.drawLine(x2, y2, x, y);
      f = 1;

    }

  }

  //           
  public void mouseReleased(MouseEvent e) {
    //           
    if (f == 1) {
      x2 = e.getX();
      y2 = e.getY();
    }
    //         ,         ,      g  ,         
    if ("   ".equals(str)) {
      g.setColor(color);
      g.drawLine(x1, y1, x2, y2);
    }
    if ("   ".equals(str)) {
      g.setColor(color);
      g.drawOval(x1, y1, x2, y2);
    }
    if ("   ".equals(str) && f == 1) {
      g.setColor(color);
      g.drawLine(x1, y1, x2, y2);
      f++;
    }
  }

  //           
  public void mouseEntered(MouseEvent e) {

  }

  //           
  public void mouseExited(MouseEvent e) {

  }

  public void actionPerformed(ActionEvent e) {
    if ("".equals(e.getActionCommand())) {
      JButton jb = (JButton) e.getSource();
      color = jb.getBackground();
    } else {
      str = e.getActionCommand();
    }
  }

  //           
  public void mouseDragged(MouseEvent e) {
    if ("   ".equals(str)) {
      int x, y;
      x = e.getX();
      y = e.getY();
      g.setColor(color);
      g.drawLine(x1, y1, x, y);
      x1 = x;
      y1 = y;
    }

  }

  //           
  public void mouseMoved(MouseEvent e) {
  
  }

}
이상 의 이 상세 한 자바 의 사건 감청 체 제 는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 지지 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기