答えて
リンク以下は、私が理解するのに役立ちました。
http://www.javaworld.com/javaworld/javaqa/2002-03/01-qa-0315-happyevent.html
他の回答よりも適切な場合は、ご自身の回答を受け入れることができます – yesraaj
これは似ています: http://www.exampledepot.com/egs/java.util/custevent.html –
Javaには、C#などの代理人やイベントの組み込みサポートが組み込まれていません。自分でObserverまたはPublish/Subscribeパターンを実装する必要があります。
Javaには、イベント処理の言語サポートがありません。しかし、いくつかのクラスがあります。 java.awt.Event
クラスをご覧ください。 java.awt.event
およびjava.beans
パッケージ。最初のパッケージは、AWTおよびSwing GUIライブラリのイベント処理の基盤です。 java.beans
パッケージには、プロパティ変更イベントとBeanコンテキストイベントを含むJava Beans specificationのサポートスタッフが含まれています。
一般に、イベント処理は、観察者に応じて実装される、または(kgiannakakisにより述べたように)パターンをパブリッシュ/サブスクライブ
ジャワにはファーストクラスのイベントはありません。すべてのイベント処理は、インターフェースとリスナー・パターンを使用して行われます。たとえば:
// Roughly analogous to .NET EventArgs
class ClickEvent extends EventObject {
public ClickEvent(Object source) {
super(source);
}
}
// Roughly analogous to .NET delegate
interface ClickListener extends EventListener {
void clicked(ClickEvent e);
}
class Button {
// Two methods and field roughly analogous to .NET event with explicit add and remove accessors
// Listener list is typically reused between several events
private EventListenerList listenerList = new EventListenerList();
void addClickListener(ClickListener l) {
clickListenerList.add(ClickListener.class, l)
}
void removeClickListener(ClickListener l) {
clickListenerList.remove(ClickListener.class, l)
}
// Roughly analogous to .net OnEvent protected virtual method pattern -
// call this method to raise the event
protected void fireClicked(ClickEvent e) {
ClickListener[] ls = listenerList.getListeners(ClickEvent.class);
for (ClickListener l : ls) {
l.clicked(e);
}
}
}
クライアントコードは、通常のハンドラを登録する匿名内部クラスを使用しています。
Button b = new Button();
b.addClickListener(new ClickListener() {
public void clicked(ClickEvent e) {
// handle event
}
});
Javaが固有のイベント処理を欠いていますが、これを実現するのに役立つライブラリがあります。 javaEventingをチェックしてください。http://code.google.com/p/javaeventing/ これはC#のように最初にイベントを定義し、イベントリスナーを登録するのと同じように動作します。 EventManager.triggerEvent(.. someEvent)を使用してイベントをトリガーします。また、カスタム条件とペイロードにイベントを提供することもできます。
ボブ
あなたは.NET型のデリゲートイベントを探しているなら、私はこのテンプレートソリューションを提案しています。 ハードキャストは不要であり、リスナーは異なるイベントクラスを使用している限り、複数の「イベント」を実装できます。
import java.util.EventListener;
import java.util.EventObject;
// replaces the .net delegate
public interface GenericEventListener<EventArgsType extends EventObject>
extends EventListener {
public void eventFired(EventArgsType e);
}
//------------------------------------------------
import java.util.EventObject;
import java.util.Vector;
// replaces the .net Event keyword
public class GenericEventSource<EventArgsType extends EventObject> {
private Vector<GenericEventListener<EventArgsType>> listenerList =
new Vector<GenericEventListener<EventArgsType>>();
//TODO handle multi-threading lock issues
public void addListener(GenericEventListener<EventArgsType> listener) {
listenerList.add(listener);
}
//TODO handle multi-threading lock issues
public void raise(EventArgsType e) {
for (GenericEventListener<EventArgsType> listener : listenerList) {
listener.eventFired(e);
}
}
}
//------------------------------------------------
// like a .net class extending EventArgs
public class MyCustomEventArgs extends EventObject {
private int arg;
public MyCustomEventArgs(Object source, int arg) {
super(source);
this.arg = arg;
}
public int getArg() {
return arg;
}
}
//------------------------------------------------
// replaces the .net event handler function. Can be put in a nested class, Java style
// Listener can handle several event types if they have different EventArg classes
public class MyCustomListener implements GenericEventListener<MyCustomEventArgs> {
private Object source = null;
private int arg;
public void eventFired(MyCustomEventArgs e) {
source = e.getSource();
arg = e.getArg();
// continue handling event...
}
}
//------------------------------------------------
import GenericEventListener;
import GenericEventSource;
// this is the class that would like to throw events (e.g. MyButton)
public class MyCustomEventSource {
// This is like declaring a .net public Event field of a specific delegate type
GenericEventSource<MyCustomEventArgs> myEvent = new GenericEventSource<MyCustomEventArgs>();
public GenericEventSource<MyCustomEventArgs> getEvent() {
return myEvent;
}
}
//------------------------------------------------
// Examples of using the event
MyCustomListener myListener1 = new MyCustomListener();
MyCustomEventSource mySource = new MyCustomEventSource();
mySource.getEvent().addListener(myListener1);
mySource.getEvent().raise(new MyCustomEventArgs(mySource,5));
- 1. イベントが発生するまでの遅延イベントの処理
- 2. Javaでのイベント処理C#でのイベント処理
- 3. Javaのイベント処理フレームワーク
- 4. Java:非分散イベント処理
- 5. java swing jtextfiledイベント処理
- 6. `keyup`イベントの処理中にエラーが発生しました
- 7. C#=処理されなかったListView発生イベント。
- 8. "イベント"内のJava例外処理
- 9. Jquery Triggerイベントをプログラムで処理し、前のイベントの処理が完了して次のイベントが発生するまで待ちます
- 10. NSWindowでのイベントの処理
- 11. ArrowIndicator Dojoでのイベント処理
- 12. WPFでのイベント処理
- 13. VB .NETでのイベント処理
- 14. Dojoでのイベント処理
- 15. Qtでのイベント処理
- 16. Chacoでのイベント処理
- 17. Pythonでのイベント処理Luigi
- 18. イベント処理
- 19. イベント処理ダイアログボックス
- 20. Scala.jsイベント処理
- 21. javascriptイベント処理
- 22. LuaInterfaceイベント処理
- 23. as3イベント処理
- 24. javascriptイベント処理
- 25. NServiceBus:「失敗した処理が完了しました」メッセージ処理のイベントが発生します。
- 26. ReactVRのイベント処理
- 27. onclickイベントの処理
- 28. GTKSDL - イベントの処理
- 29. パジャマのイベント処理
- 30. javascriptのイベント処理
あなたはあなたが何をしているのか少し詳しく説明してください。どのような出来事ですか? Javaには本質的なイベントはありませんが、おそらく例外はあなたの後にありますか? – falstro
AWTイベントを意味しますか? –
このように http://www.codeproject.com/KB/cs/csevents01.aspx – bdhar