|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.beans.EventHandler
public class EventHandler
EventHandler
クラスは、受信イベントオブジェクトとターゲットオブジェクトを含んだ単純な文を実行するメソッドを持つ、イベントリスナーの動的生成をサポートします。
EventHandler
クラスは、開発者が Bean 間の接続を確立するために使用する、アプリケーションビルダのような対話型ツールで使用されます。通常、接続は、ユーザインタフェース Bean (イベントソース) からアプリケーションロジック Bean (ターゲット) に向けて確立されます。そのなかでも、ユーザインタフェースからアプリケーションロジックを隔離するような接続は特に効果的です。たとえば、JCheckBox
とブール値を受け付けるメソッドを接続する EventHandler
は、チェックボックスの状態を抽出し、これを直接メソッドに渡すことによって、メソッドをユーザインタフェース層から隔離することができます。
ユーザインタフェースを使ったイベントの処理方法としてより一般的なのは、内部クラスを使用する方法です。EventHandler
クラスで処理できるのは、内部クラスで処理できるイベントのサブセットに過ぎません。しかし、長期持続スキーマでは、内部クラスよりも EventHandler
のほうが優れています。また、同じインタフェースを実装している大規模なアプリケーションで EventHandler
を繰り返し利用すれば、ディスクやアプリケーションのメモリフットプリントを削減できます。
EventHandler
で作成されたリスナーのフットプリントが小さいのは、このクラスの依存先の 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
インタフェースの新しい実装を定義し、そのインスタンスをボタンに追加します。
次に単純な利用方法として、リスナーインタフェース (通常はイベントオブジェクト) 内のメソッドの最初の引数からプロパティ値を抽出し、これを使ってターゲットオブジェクト内のプロパティ値を設定する例を紹介します。この例では、ターゲットオブジェクトの//Equivalent code using an inner class instead of EventHandler.myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.toFront(); }});
nextFocusableComponent
プロパティをイベントのソースプロパティの値に設定する ActionListener
を作成します。
これは、次の内部クラス実装に対応しています。EventHandler.create(ActionListener.class, target, "nextFocusableComponent", "source")
イベントオブジェクトのソースからプロパティ値を抽出し、この値をターゲットオブジェクトのプロパティ値として設定するというのが、おそらく最も一般的な//Equivalent code using an inner class instead of EventHandler.new ActionListener() { public void actionPerformed(ActionEvent e) { button.setNextFocusableComponent((Component)e.getSource()); }}
EventHandler
の利用方法でしょう。次の例では、ターゲットオブジェクトの label プロパティを、イベントのソースの text プロパティの値 (source プロパティの値) に設定する ActionListener
を作成します。
これは、次の内部クラス実装に対応しています。EventHandler.create(ActionListener.class, button, "label", "source.text")
イベントプロパティは、ピリオド (.) で区切られた任意の数のプロパティ接頭辞によって修飾されます。ピリオドの前に表示される完全指定名は、イベントオブジェクトに適用されるプロパティ (左から順に適用) の名前として扱われます。//Equivalent code using an inner class instead of EventHandler.new ActionListener { public void actionPerformed(ActionEvent e) { button.setLabel(((JTextField)e.getSource()).getText()); }}
たとえば、次のようなアクションリスナーがあります。
このアクションリスナーは、次の内部クラスとして書き込まれます (すべてのプロパティが正規の get メソッドを持ち、適切な型を返すものと想定)。EventHandler.create(ActionListener.class, target, "a", "b.c.d")
//Equivalent code using an inner class instead of EventHandler.new ActionListener { public void actionPerformed(ActionEvent e) { target.setA(e.getB().getC().isD()); }}
Proxy
,
EventObject
コンストラクタの概要 | |
---|---|
EventHandler(Object target,
String action,
String eventPropertyName,
String listenerMethodName)
新しい EventHandler オブジェクトを作成します (このコンストラクタを直接呼び出すのではなく create メソッドを使用するのが一般的)。 |
メソッドの概要 | ||
---|---|---|
static
|
create(Class<T> listenerInterface,
Object target,
String action)
リスナーインタフェース内のすべてのメソッドがハンドラの action を target に適用するための listenerInterface 実装を作成します。 |
|
static
|
create(Class<T> listenerInterface,
Object target,
String action,
String eventPropertyName)
すべてのメソッドから、イベント式 eventPropertyName の値を文中の最後のメソッドである action (target に適用される) に渡すための listenerInterface 実装を作成します。 |
|
static
|
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 |
コンストラクタの詳細 |
---|
public EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName)
EventHandler
オブジェクトを作成します (このコンストラクタを直接呼び出すのではなく create
メソッドを使用するのが一般的)。
target
- アクションを実行するオブジェクトaction
- ターゲット上の書き込み可能なプロパティまたはメソッドの (完全指定された) 名前eventPropertyName
- 受信イベントの読み込み可能なプロパティの (完全指定された) 名前listenerMethodName
- アクションをトリガするリスナーインタフェース内のメソッドの名前EventHandler
,
create(Class, Object, String, String, String)
,
getTarget()
,
getAction()
,
getEventPropertyName()
,
getListenerMethodName()
メソッドの詳細 |
---|
public Object getTarget()
EventHandler(Object, String, String, String)
public String getAction()
EventHandler(Object, String, String, String)
public String getEventPropertyName()
EventHandler(Object, String, String, String)
public String getListenerMethodName()
null
は、リスナーインタフェース内のすべてのメソッドがアクションをトリガすることを表します。
EventHandler(Object, String, String, String)
public Object invoke(Object proxy, Method method, Object[] arguments)
EventHandler
に関連付けられているアクションに渡します。
InvocationHandler
内の invoke
proxy
- プロキシオブジェクトmethod
- リスナーインタフェース内のメソッドarguments
- プロキシインスタンスでのメソッド呼び出し時に渡される引数値を格納するオブジェクト配列。インタフェースメソッドが引数をとらない場合、null となる。プリミティブ型引数は java.lang.Integer
または java.lang.Boolean
のような適切なプリミティブ型ラッパークラスのインスタンスにラップされる
EventHandler
public static <T> T create(Class<T> listenerInterface, Object target, String action)
action
を target
に適用するための listenerInterface
実装を作成します。このメソッドは、その他のより一般的な create
メソッドの実装と null
値をとる eventPropertyName
および listenerMethodName
を呼び出すことによって実装されます。
以下は、dialog.show()
を使って、JDialog
を表示する ActionListener
を作成する例です。
EventHandler.create(ActionListener.class, dialog, "show")
listenerInterface
- 作成されたプロキシを利用するリスナーインタフェースtarget
- アクションを実行するオブジェクトaction
- ターゲット上の書き込み可能なプロパティまたはメソッドの名前
listenerInterface
を実装するオブジェクトcreate(Class, Object, String, String)
public static <T> T create(Class<T> listenerInterface, Object target, String action, String eventPropertyName)
eventPropertyName
の値を文中の最後のメソッドである action
(target
に適用される) に渡すための listenerInterface
実装を作成します。このメソッドは、より一般的な create
メソッドの実装と null
値をとる listenerMethodName
を呼び出すことによって実装されます。
次のコードを使って、JLabel
のテキストを受信イベントの JTextField
ソースのテキスト値に設定するような ActionListener
を作成できます。
これは次のコードと等価です。EventHandler.create(ActionListener.class, label, "text", "source.text");
//Equivalent code using an inner class instead of EventHandler.label.setText((JTextField(event.getSource())).getText())
listenerInterface
- 作成されたプロキシを利用するリスナーインタフェースtarget
- アクションを実行するオブジェクトaction
- ターゲット上の書き込み可能なプロパティまたはメソッドの名前eventPropertyName
- 受信イベントの読み込み可能なプロパティの (完全指定された) 名前
listenerInterface
を実装するオブジェクトcreate(Class, Object, String, String, String)
public static <T> T create(Class<T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)
listenerMethodName
という名前のメソッドから、イベント式の値 eventPropertyName
を文中の最後のメソッド action
(target
に適用される) に渡すための listenerInterface
実装を作成します。
eventPropertyName
が null
の場合、実装は、action
に指定された名前のメソッドを呼び出します。EventObject
を受け付けるメソッドが定義されていない場合、このアクションは EventObject
または同じ名前の引数なしのメソッドをとります。
listenerMethodName
が null
の場合は、インタフェース内のすべてのメソッドが、target
上で実行される action
をトリガします。
たとえば、マウスボタンを押すたびにターゲットオブジェクトの origin
プロパティを受信する MouseEvent
の場所 (mouseEvent.getPoint()
の値) に設定する MouseListener
を作成したい場合は、次のように記述します。
これは、EventHandler.create(MouseListener.class, "mousePressed", target, "origin", "point");
mousePressed
を除くすべてのメソッドが操作不能である MouseListener
の記述と同じです。
//Equivalent code using an inner class instead of EventHandler.new MouseAdapter() { public void mousePressed(MouseEvent e) { target.setOrigin(e.getPoint()); }}
listenerInterface
- 作成されたプロキシを利用するリスナーインタフェースtarget
- アクションを実行するオブジェクトaction
- ターゲット上の書き込み可能なプロパティまたはメソッドの名前eventPropertyName
- 受信イベントの読み込み可能なプロパティの (完全指定された) 名前listenerMethodName
- アクションをトリガするリスナーインタフェース内のメソッドの名前
listenerInterface
を実装するオブジェクトEventHandler
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。