2024.01.29

김무영·2024년 1월 29일
post-thumbnail

Event Handling

  • 사용자의 동작이 있을 때, 그에 대한 대비코드를 준비해두고 실행 하는 것.
  • event는 java.awt.event 와 javax.swing.event 패키지에서 제공하는 클래스를 사용.
  • swing에서 java의 event를 사용할 수 있다.
  • 작성법 )
    1. 발생하는 이벤트를 처리할 수 있는 XxxListener를 구현

    2. 컴포넌트에서 이벤트에 등록하는 method를 호출
      컴포넌트명.addXxxListener(이벤트가 발생했을 때 처리할 객체)
    3. XxxListener에 존재하는 abstract method를 Override한다.
      • Override한 method에서 이벤트가 발생했을 때 사용자에게 제공할 코드를 기술.
        ( 이벤트가 발생했을 때 처리할 코드를 기술 )
      컴포넌트명.addXxxListener(이벤트가 발생했을 때 처리할 객체)

흐름

  • java TestActionEvent 실행
jbtn.addActionListener( this );
  1. 사용자가 버튼을 클릭하면
  2. JVM이 이벤트객체에 등록된 컴포넌트인지를 판단.
  3. 등록된 버튼이 아니라면 무시, 등록된 버튼이라면 event객체를 생성.
    Override된 method를 호출하면서 생성된 이벤트 객체를 arguments로 할당해준다.
    버튼이면 ActionEvent객체가 생성되고 => Override한 actionPerformed()를 호출하여 매개변수에 ActionEvent객체를 입력해준다.

이벤트코딩 순서

  1. 이벤트를 처리할 수 있는 XxxListener를 구현
    public class Test extends JFrame implements ActionListener{
    }
  2. 이벤트 처리와 관련있는 컴포넌트를 인스턴스 변수로 선언.
    private JButton jbtn;  // actionPerformed에서 비교해야할 컴포넌트를 선언
    //지역변수로 생성해버리면 참조할 수 없기 때문에 인스턴스 변수로 선언.
  3. 생성자에서 컴포넌트를 생성
    public Test(){
    jbtn = new Jbutton();
  4. 이벤트에 등록
    jbtn.addActionListener( this );
  5. 배치작업
  6. 가시화
  7. 종료이벤트처리
    @Override
    public void actionPerformed( ActionEvent ae ){
    }
  8. 이벤트가 발생했을 때 사용자에게 제공할 코드……
    }

윈도우 종료

  • WindowListener 인터페이스를 구현하여 windowClosing()안에서 종료 처리 코드 (
    Frame에서 제공하는 dispose()) 호출 한다.

XxxAdapter 클래스

  • 이벤트를 처리하기 위해 구현된 XxxListener가 abstract method를 하나이상 가지고 있을 때
    구현 클래스에서 편하게 사용하도록 XxxListener를 미리 구현해둔 클래스들.
  • abstract class : 직접 객체화 되지 않고, 자식 클래스에 의해서 객체화된다.
  • 자식클래스에서는 필요한 method만 Override하여 사용한다.
  • 상속,

interface와 is a

  • 구현 클래스에서 모든 추상 메서드를 Override해야한다.

interface와 is a 디자인과 has a

  • 구현 클래스에서 모든 추상 메서드를 Override해야한다.

adapter와 is a 디자인과 has a

  • 하위 클래스에서는 필요한 method만 override 한다.
  • 방법 )
    1. 디자인 클래스를 객체화
    new MyDesign() => 생성자
    1. 이벤트 클래스를 객체화
    MyEvent me = new MyEvent( this );
    1. 이벤트를 등록
    addWindowListner( me );

0개의 댓글