EventHandler (Java Platform SE 6) - xrath.com 에서 번역됨

개요 | 패키지 | 클래스 | 사용 | 계층 트리 | 비추천 API | 색인 | 헬프

JavaTM Platform
Standard Ed. 6

앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드

## java.beans
클래스 EventHandler

    java.lang.Object
      java.beans.EventHandler

모든 구현된 인터페이스:
  InvocationHandler

    public class EventHandler

extends Object
implements InvocationHandler

`EventHandler` 클래스는, 수신 이벤트 객체와 타겟 객체를 포함한 단순한 문장을 실행하는 메소드를 가지는, 이벤트 청취자의 동적 생성을 지원합니다.

`EventHandler` 클래스는, 개발자가 Bean 간의 접속을 확립하기 위해서 사용하는, 아프리케이션빌더와 같은 대화형 툴로 사용됩니다. 일반적으로, 접속은, 사용자 인터페이스 Bean (이벤트 소스)로부터 어플리케이션 논리 Bean (타겟)를 향해 확립됩니다. 그 중에서도, 사용자 인터페이스로부터 어플리케이션 논리를 격리하는 것 같은 접속은 특히 효과적입니다. 예를 들어,`JCheckBox`와 불리언 값을 받아들이는 메소드를 접속하는 `EventHandler` 는, 체크 박스 상태를 추출해, 이것을 직접 메소드에 건네주는 것에 의해, 메소드를 사용자 인터페이스층으로부터 격리할 수가 있습니다.

사용자 인터페이스를 사용한 이벤트의 처리 방법으로서 보다 일반적인 것은, 내부 클래스를 사용하는 방법입니다. `EventHandler` 클래스에서 처리할 수 있는 것은, 내부 클래스에서 처리할 수 있는 이벤트의 부분집합에 지나지 않습니다. 그러나, 장기 지속 schema에서는, 내부 클래스보다 `EventHandler` 쪽이 우수합니다. 또, 같은 인터페이스를 구현하고 있는 대규모 어플리케이션으로 `EventHandler` 를 반복해 이용하면, 디스크나 어플리케이션의 메모리 사용량(footprint)을 삭감할 수 있습니다.

`EventHandler` 로 작성된 청취자의 사용량(footprint)이 작은 것은, 이 클래스의 의존처의 `Proxy` 클래스가 같은 인터페이스의 구현을 공유하고 있기 때문입니다. 예를 들어,`EventHandler` `create` 메소드를 사용해 어플리케이션내의 모든 `ActionListener` 를 작성하는 경우, 모든 액션 청취자는, 단일의 클래스 (`Proxy` 클래스에 의해 생성된 클래스)의 인스턴스가 됩니다. 일반적으로,`Proxy` 클래스의 청취자를 사용하는 경우는, 「청취자형」(인터페이스) 마다 청취자 클래스를 1 개씩 작성할 필요가 있습니다. 그러나, 내부 클래스를 사용하는 방법에서는, 청취자 (인터페이스를 구현하는 객체) 마다 클래스를 1 개씩 작성하는 것만으로 끝납니다.

일반적으로,`EventHandler` 의 인스턴스를 직접 취급할 것은 없습니다. 그 대신에,`EventHandler` 의 `create` 메소드를 사용해, 지정된 청취자 인터페이스를 구현하는 객체를 작성합니다. 이 청취자 객체는, 내부에서 `EventHandler` 객체를 사용해, 이벤트에 관한 정보, 이벤트 발생시에 메세지가 송신되는 객체, 송신되는 메세지 (메소드), 메소드의 인수를 캡슐화합니다. 이하에서는, 예를 사용해,`create` 메소드에 의한 청취자 객체의 작성 방법에 대해 설명합니다.

## 이벤트 핸들러의 사용예

타겟 객체상의 메소드를 인수없이 호출하는 청취자를 인스톨 한다는 것이, 가장 단순한 `EventHandler` 의 이용 방법입니다. 다음의 예에서는,`javax.swing.JFrame` 의 인스턴스상의 `toFront` 메소드를 호출하는 `ActionListener` 를 작성합니다.

>     myButton.addActionListener(
>         (ActionListener) EventHandler.create(ActionListener.class, frame, "toFront"));

`myButton` 를 누르면(자),`frame.toFront()` 문이 실행됩니다. 컴파일시의 형태 보증을 추가해도, 같은 결과를 얻을 수 있습니다. 이 때문에는,`ActionListener` 인터페이스의 새로운 구현을 정의해, 그 인스턴스를 버튼에 추가합니다.

>     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
>     myButton.addActionListener(new ActionListener() {
>         public void actionPerformed(ActionEvent e) {
>             frame.toFront();
>         }
>     });

다음에 `EventHandler` 의 단순한 이용 방법으로서 청취자 인터페이스 (일반적으로은 이벤트 객체) 내의 메소드의 최초의 인수로부터 프로퍼티치를 추출해, 이것을 사용해 타겟 객체내의 프로퍼티치를 설정하는 예를 소개합니다. 이 예에서는, 타겟 (myButton) 객체의 `nextFocusableComponent` 프로퍼티을 이벤트의 소스 프로퍼티의 값으로 설정하는 `ActionListener` 를 작성합니다.

>     EventHandler.create(ActionListener.class, myButton, "nextFocusableComponent", "source")

이것은, 다음의 내부 클래스 구현에 대응하고 있습니다.

>     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
>     new ActionListener() {
>         public void actionPerformed(ActionEvent e) {
>             myButton.setNextFocusableComponent((Component) e.getSource());
>         }
>     }

수신 이벤트 객체를 타겟 액션에 건네줄 뿐(만큼)의 `EventHandler` 를 작성할 수도 있습니다. 4 번째의 `EventHandler.create` 인수가 빈 상태(empty)의 캐릭터 라인인 경우, 다음과 같이 해 이벤트가 건네받습니다.

>     EventHandler.create(ActionListener.class, target, "doActionEvent", "")

이것은, 다음의 내부 클래스 구현에 대응하고 있습니다.

>     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
>     new ActionListener() {
>         public void actionPerformed(ActionEvent e) {
>             target.doActionEvent(e);
>         }
>     }

이벤트 객체의 소스로부터 프로퍼티치를 추출해, 이 값을 타겟 객체의 프로퍼티치로서 설정한다는 것이, 아마 가장 일반적인 `EventHandler` 의 이용 방법이지요. 다음의 예에서는, 타겟 객체의 label 프로퍼티을 이벤트의 소스의 text 프로퍼티의 값 (source 프로퍼티의 값)으로 설정하는 `ActionListener` 를 작성합니다.

>     EventHandler.create(ActionListener.class, myButton, "label", "source.text")

이것은, 다음의 내부 클래스 구현에 대응하고 있습니다.

>     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
>     new ActionListener {
>         public void actionPerformed(ActionEvent e) {
>             myButton.setLabel(((JTextField) e.getSource()). getText());
>         }
>     }

이벤트 프로퍼티은, 피리어드 (. )(으)로 단락지어진 임의의 수의 프로퍼티 접두사에 의해 수식됩니다. 피리어드의 전에 표시되는 완전 지정명은, 이벤트 객체에 적용되는 프로퍼티 (왼쪽으로부터 순서에 적용)의 이름으로서 다루어집니다.

예를 들어, 다음과 같은 액션 청취자가 있습니다.

>     EventHandler.create(ActionListener.class, target, "a", "b.c.d")

이 액션 청취자는, 다음의 내부 클래스로서 기입해집니다 (모든 프로퍼티이 정규의 취득 메소드를 가져, 적절한 형태를 돌려주는 것과 상정).

>     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
>     new ActionListener {
>         public void actionPerformed(ActionEvent e) {
>             target.setA(e.getB(). getC(). isD());
>         }
>     }

타겟 프로퍼티은, 피리어드 (. )(으)로 단락지어진 임의의 수의 프로퍼티 접두사에 의해도 수식됩니다. 예를 들어, 다음과 같은 액션 청취자가 있습니다.

       EventHandler.create(ActionListener.class, target, "a.b", "c.d")

이 액션 청취자는, 다음의 내부 클래스로서 기입해집니다 (모든 프로퍼티이 정규의 취득 메소드를 가져, 적절한 형태를 돌려주는 것과 상정).

       //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
       new ActionListener {
         public void actionPerformed(ActionEvent e) {
             target.getA(). setB(e.getC(). isD());
        }
    }

`EventHandler` 는 메소드를 호출할 때에 최종적으로 리플렉션에 의존하기 위해(때문에), overload 된 메소드를 타겟으로 하지 않는 것을 추천합니다. 예를 들어 타겟이 다음과 같이 정의된 클래스 `MyTarget` 의 인스턴스이다고 합니다.

       public class MyTarget {
         public void doIt(String);
         public void doIt(Object);
       }

이것으로 메소드 `doIt` 는 overload 됩니다. EventHandler 는 소스에 근거해 적절한 메소드를 호출합니다. 소스가 null 의 경우는, 어느 쪽의 메소드도 적합하기 (위해)때문에, 불려 가는 메소드는 부정입니다. 그 때문에, overload 된 메소드를 타겟으로 하지 않는 것을 추천합니다.

도입된 버젼:
  1.4
관련 항목:
  `Proxy` , `EventObject`

생성자 의 개요
`EventHandler (Object target, String action, String eventPropertyName, String listenerMethodName)` 새로운 `EventHandler` 객체를 작성합니다 (이 생성자 을 직접 호출하는 것이 아니라 `create` 메소드를 사용하는 것이 일반적).

메소드의 개요

`static

`<T> T`

`

`create (Class <T> listenerInterface, Object target, String action)`
청취자 인터페이스내의 모든 메소드가 핸들러의 `action` 를 `target` 에 적용하기 위한 `listenerInterface` 구현을 작성합니다.

`static

`<T> T`

`

`create (Class <T> listenerInterface, Object target, String action, String eventPropertyName)`
/** 모든 메소드로부터, 이벤트식 `eventPropertyName` 의 값을 문중의 마지막 메소드인 `action` (`target` 에 적용된다)에 건네주기 위한 `listenerInterface` 구현을 작성합니다.

`static

`<T> T`

`

`create (Class <T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)`
/** `listenerMethodName` 라는 이름의 메소드로부터, 이벤트식의 값 `eventPropertyName` 를 문중의 마지막 메소드 `action` (`target` 에 적용된다)에 건네주기 위한 `listenerInterface` 구현을 작성합니다.

`String` | `getAction ()` 이 이벤트 핸들러에 의해 설정되는 타겟의 기입해 가능한 프로퍼티, 또는 이 이벤트가 타겟상에서 호출하는 메소드의 이름을 돌려줍니다.
`String` | `getEventPropertyName ()` 타겟으로 적용되는 액션으로 사용되는 이벤트의 프로퍼티을 돌려줍니다.
`String` | `getListenerMethodName ()` 액션을 트리거하는 메소드의 이름을 돌려줍니다.
`Object` | `getTarget ()` 이 이벤트 핸들러가 메세지의 송신지로 하는 객체를 돌려줍니다.
`Object` | `invoke (Object proxy, Method method, Object [] arguments)` 이벤트로부터 적절한 프로퍼티치를 추출해, 이 `EventHandler` 에 관련지을 수 있고 있는 액션에 건네줍니다.

클래스 java.lang. Object 로부터 상속된 메소드
`clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait`

생성자 의 상세

### EventHandler

    public EventHandler(Object  target,
                        String  action,
                        String  eventPropertyName,
                        String  listenerMethodName)

  새로운 `EventHandler` 객체를 작성합니다 (이 생성자 을 직접 호출하는 것이 아니라 `create` 메소드를 사용하는 것이 일반적). `eventPropertyName` 및 `listenerMethodName` 파라미터의 상세한 것에 대하여는, `범용적인 버젼의 작성` 을 참조해 주세요.

  파라미터:
    `target` - 액션을 실행하는 객체
    `action` - 타겟상의 (수식되고 있을 가능성이 있다) 프로퍼티 또는 메소드의 이름
    `eventPropertyName` - 수신 이벤트의 읽어들여 가능한 프로퍼티의 (수식되고 있을 가능성이 있다) 이름
    `listenerMethodName` - 액션을 트리거하는 청취자 인터페이스내의 메소드의 이름
  예외:
    `NullPointerException` - `target` 가 null 의 경우
    `NullPointerException` - `action` 가 null 의 경우
  관련 항목:
    `EventHandler` , `create(Class, Object, String, String, String)` , `getTarget()` , `getAction()` , `getEventPropertyName()` , `getListenerMethodName()`

메소드의 상세

### getTarget

    public Object  getTarget()

  이 이벤트 핸들러가 메세지의 송신지로 하는 객체를 돌려줍니다.

  반환값:
    이 이벤트 핸들러의 타겟
  관련 항목:
    `EventHandler(Object, String, String, String)`

### getAction

    public String  getAction()

  이 이벤트 핸들러에 의해 설정되는 타겟의 기입해 가능한 프로퍼티, 또는 이 이벤트가 타겟상에서 호출하는 메소드의 이름을 돌려줍니다.

  반환값:
    이 이벤트 핸들러의 액션
  관련 항목:
    `EventHandler(Object, String, String, String)`

### getEventPropertyName

    public String  getEventPropertyName()

  타겟으로 적용되는 액션으로 사용되는 이벤트의 프로퍼티을 돌려줍니다.

  반환값:
    이벤트의 프로퍼티
  관련 항목:
    `EventHandler(Object, String, String, String)`

### getListenerMethodName

    public String  getListenerMethodName()

  액션을 트리거하는 메소드의 이름을 돌려줍니다. 반환값 `null` 는, 청취자 인터페이스내의 모든 메소드가 액션을 트리거하는 것을 나타냅니다.

  반환값:
    액션을 트리거하는 메소드의 이름
  관련 항목:
    `EventHandler(Object, String, String, String)`

### invoke

    public Object  invoke(Object  proxy,
                         Method  method,
                         Object [] arguments)

  이벤트로부터 적절한 프로퍼티치를 추출해, 이 `EventHandler` 에 관련지을 수 있고 있는 액션에 건네줍니다.

  정의:
    인터페이스 `InvocationHandler` 내의 `invoke`
  파라미터:
    `proxy` - 프록시 객체
    `method` - 청취자 인터페이스내의 메소드
    `arguments` - 프록시 인스턴스에서의 메소드 호출시에게 건네지는 인수치를 포함하는 객체 배열. 인터페이스 메소드가 인수를 취하지 않는 경우,`null` 가 된다. 원시형 인수는 `java.lang.Integer` 또는 `java.lang.Boolean` 와 같이 적절한 원시형 래퍼 클래스의 인스턴스에 랩 된다
  반환값:
    타겟으로 액션을 적용한 결과
  관련 항목:
    `EventHandler`

### create

    public static <T> T create(Class <T> listenerInterface,
                               Object  target,
                               String  action)

  청취자 인터페이스내의 모든 메소드가 핸들러의 `action` 를 `target` 에 적용하기 위한 `listenerInterface` 구현을 작성합니다. 이 메소드는,`null` 값을 받는 `eventPropertyName` 와 `listenerMethodName` 의 양쪽 모두를 가지는, 다른 것보다 일반적인 구현의 `create` 메소드를 호출하는 것에 의해 구현됩니다. `action` 파라미터의 상세한 것에 대하여는, `범용적인 버젼의 작성` 을 참조해 주세요.

  이하는,`dialog.show()` 를 사용해,`JDialog` 를 표시하는 `ActionListener` 를 작성하는 예입니다.

  >     EventHandler.create(ActionListener.class, dialog, "show")

  파라미터:
    `listenerInterface` - 작성된 프록시를 이용하는 청취자 인터페이스
    `target` - 액션을 실행하는 객체
    `action` - 타겟상의 (수식되고 있을 가능성이 있다) 프로퍼티 또는 메소드의 이름
  반환값:
    `listenerInterface` 를 구현하는 객체
  예외:
    `NullPointerException` - `listenerInterface` 가 null 의 경우
    `NullPointerException` - `target` 가 null 의 경우
    `NullPointerException` - `action` 가 null 의 경우
  관련 항목:
    `create(Class, Object, String, String)`

### create

    public static <T> T create(Class <T> listenerInterface,
                               Object  target,
                               String  action,
                               String  eventPropertyName)

  /** 모든 메소드로부터, 이벤트식 `eventPropertyName` 의 값을 문중의 마지막 메소드인 `action` (`target` 에 적용된다)에 건네주기 위한 `listenerInterface` 구현을 작성합니다. 이 메소드는,`null` 값을 받는 `listenerMethodName` 를 가지는, 보다 일반적인 구현의 `create` 메소드를 호출하는 것에 의해 구현됩니다. `action` 및 `eventPropertyName` 파라미터의 상세한 것에 대하여는, `범용적인 버젼의 작성` 을 참조해 주세요.

  다음의 코드를 사용해,`JLabel` 의 텍스트를 수신 이벤트의 `JTextField` 소스의 텍스트치로 설정하는 것 같은 `ActionListener` 를 작성할 수 있습니다.

  >     EventHandler.create(ActionListener.class, label, "text", "source.text");

  이것은 다음의 코드와 등가입니다.

  >     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
  >     new ActionListener() {
  >         public void actionPerformed(ActionEvent event) {
  >             label.setText(((JTextField)(event.getSource())). getText());
  >          }
  >     };

  파라미터:
    `listenerInterface` - 작성된 프록시를 이용하는 청취자 인터페이스
    `target` - 액션을 실행하는 객체
    `action` - 타겟상의 (수식되고 있을 가능성이 있다) 프로퍼티 또는 메소드의 이름
    `eventPropertyName` - 수신 이벤트의 읽어들여 가능한 프로퍼티의 (수식되고 있을 가능성이 있다) 이름
  반환값:
    `listenerInterface` 를 구현하는 객체
  예외:
    `NullPointerException` - `listenerInterface` 가 null 의 경우
    `NullPointerException` - `target` 가 null 의 경우
    `NullPointerException` - `action` 가 null 의 경우
  관련 항목:
    `create(Class, Object, String, String, String)`

### create

    public static <T> T create(Class <T> listenerInterface,
                               Object  target,
                               String  action,
                               String  eventPropertyName,
                               String  listenerMethodName)

  /** `listenerMethodName` 라는 이름의 메소드로부터, 이벤트식의 값 `eventPropertyName` 를 문중의 마지막 메소드 `action` (`target` 에 적용된다)에 건네주기 위한 `listenerInterface` 구현을 작성합니다. 그 외의 청취자 메소드는, 아무것도 처리를 실시하지 않습니다.

  `eventPropertyName` 캐릭터 라인은, 타겟 메소드에게 건네지는 수신 이벤트 객체로부터 값을 추출하기 위해서 사용됩니다. 일반적으로, 타겟 메소드는 인수를 취하지 않기 때문에,`eventPropertyName` 로 null 치를 사용하도록 해 주세요. 또, 수신 이벤트 객체를 타겟 메소드에 직접 건네주려면 , 빈 상태(empty)의 캐릭터 라인을 사용합니다. `eventPropertyName` 캐릭터 라인의 형식은, 메소드 또는 프로퍼티의 순서입니다. 각각의 메소드나 프로퍼티은, 수신 이벤트 객체로부터 개시된 선행 메소드에 의해 반환되는 값에 대해서 적용됩니다. 구문은 다음과 같습니다. `propertyName{. propertyName}*` 여기서 `propertyName` 는 메소드 또는 프로퍼티에 일치합니다. 예를 들어 `point` 프로퍼티을 `MouseEvent` 로부터 추출하려면 ,`「point」`또는`「getPoint」`를 `eventPropertyName` 로서 사용할 수 있습니다. 「text」프로퍼티을 `JLabel` 소스를 가지는 `MouseEvent` 로부터 추출하려면 ,`「source.text」`,`「getSource.text」`,`「getSource.getText」`, 또는 `「source.getText」` 의 어느쪽이든을 `eventPropertyName` 로서 사용합니다. 메소드가 발견되지 않는 경우, 또는 메소드의 호출로 예외가 생성되었을 경우는, 발송시에 `RuntimeException` 가 throw 됩니다. 예를 들어 수신 이벤트 객체가 null 로,`eventPropertyName` 가 null 도 빈 상태(empty)도 아닌 경우는,`RuntimeException` 가 throw 됩니다.

  `action` 인수의 형식은 `eventPropertyName` 인수의 형식과 같아, 마지막 프로퍼티명은 메소드명 또는 기입해 가능한 프로퍼티을 나타냅니다.

  `listenerMethodName` 가 `null` 의 경우는, 인터페이스내의 모든 메소드가,`target` 상에서 실행되는 `action` 를 트리거합니다.

  예를 들어, mouse button를 누를 때마다 타겟 객체의 `origin` 프로퍼티을 수신하는 `MouseEvent` 의 장소 (`mouseEvent.getPoint()` 의 값)로 설정하는 `MouseListener` 를 작성하고 싶은 경우는, 다음과 같이 기술합니다.

  >     EventHandler.create(MouseListener.class, "mousePressed", target, "origin", "point");

  이것은,`mousePressed` 를 제외하는 모든 메소드가 조작 불능인 `MouseListener` 의 기술과 같습니다.

  >     //EventHandler 대신에 내부 클래스를 사용하는 동등의 코드
  >     new MouseAdapter() {
  >         public void mousePressed(MouseEvent e) {
  >             target.setOrigin(e.getPoint());
  >         }
  >     };

  파라미터:
    `listenerInterface` - 작성된 프록시를 이용하는 청취자 인터페이스
    `target` - 액션을 실행하는 객체
    `action` - 타겟상의 (수식되고 있을 가능성이 있다) 프로퍼티 또는 메소드의 이름
    `eventPropertyName` - 수신 이벤트의 읽어들여 가능한 프로퍼티의 (수식되고 있을 가능성이 있다) 이름
    `listenerMethodName` - 액션을 트리거하는 청취자 인터페이스내의 메소드의 이름
  반환값:
    `listenerInterface` 를 구현하는 객체
  예외:
    `NullPointerException` - `listenerInterface` 가 null 의 경우
    `NullPointerException` - `target` 가 null 의 경우
    `NullPointerException` - `action` 가 null 의 경우
  관련 항목:
    `EventHandler`

개요 | 패키지 | 클래스 | 사용 | 계층 트리 | 비추천 API | 색인 | 헬프

JavaTM Platform
Standard Ed. 6

앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.