9

私はAS3でイベントリスナーを扱ってきましたが、Javaにはないようです(グラフィックコンポーネントを除く)。それは驚くべきことです。

問題は、Java で独自のイベント リスナーを実装するにはどうすればよいかということです。多分誰かが前にその仕事をしましたか?

4

5 に答える 5

14

Listener インターフェイスを定義できます。

public interface EventListener {
    void fireEvent (Event e);
}

次に、コードで:

EventListener lst = new EventListener() {
    @Override
    public void fireEvent (Event e) {
        //do what you want with e
    }
}

someObject.setListener(lst);
someObject.somethingHappened();

次に、someObject で (実際には、おそらくリスナーのリストを保持します):

public class SomeObject {
    private EventListener lst;

    public void setListener (EventListener lst) {
        this.lst = lst;
    }

    public void somethingHappened () {
        lst.fireEvent(new Event("Something Happened"));
    }
}
于 2012-12-21T13:11:58.110 に答える
4

PropertyChangeListenerPropertyChangeSupportを使用するか、Observer パターンを使用できます。

于 2012-12-21T13:17:25.957 に答える
3

まず、リスナーをアタッチできるように、イベントのソースが必要です。カスタム リスナーが必要な場合は、カスタム ソースも実装する必要があります。

listenerJava では、既存のソースとインターフェースを見つけることができます。あなたが言及したように、GUIは通常イベントに基づいています。3D に興味がある場合、レンダリング エンジンは適切な API (例: collision detection)、ファイル システム フック、プロパティ変更リスナー ( Android) を提供します。

それはあなたのニーズに依存します。ほとんどの用途では、適切な API を提供するライブラリが既に存在するはずです。

独自のソリューションを実装する場合、アプリケーション全体のイベント処理にはイベント バスが適している場合があります。私の好ましい実装は Guava ライブラリにあります: http://code.google.com/p/guava-libraries/wiki/EventBusExplained

于 2012-12-21T13:13:07.747 に答える
2

観察したいオブジェクトのObservableクラスを拡張する Java で一種のリスナーを実装でき、リスナーでObserverを実装します。

于 2012-12-21T13:13:47.083 に答える
1

フレームワークや Observer クラスは必要ありません。1995 年のバージョン 1.0 以降、すべて Java Beans 仕様に組み込まれています。これは、VB プロパティに対する Java の答えであるはずでした。

チュートリアルは次のとおりです。

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

于 2012-12-21T13:15:37.870 に答える