14

何かに対して独自のリスナーを作成し、それを他のリスナーと同じように使用できるようにする方法を考えていました。

public interface Listener {

    public void onListen(Event e);

}

そして、これは私のクラスで

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

私が本当に求めているのは、私が作成したリスナーに関連して何かが発生したかどうかを確認する方法をどこで定義すればよいのでしょうか?

これが意味をなさない場合は、教えてください。明確にします。

せいぜいこれがあなたにとって意味をなさない場合、私はこれを試します. コンボボックスで選択したオプションが別のオプションに変更されたかどうかを確認するリスナーを作成するにはどうすればよいですか。ただし、実際にはコンボボックス リスナーは必要ありません。これは単なる例です。

4

2 に答える 2

17

以下に短い例を示します。

    private static class Position {
    }

    private static class Ball {
        private ArrayList<FootballObserver> observers = new ArrayList<FootballObserver>();
        private Position ballPosition = new Position();

        public void registerObserver(FootballObserver observer) {
            observers.add(observer);
        }

        public void notifyListeners() {
            for(FootballObserver observer : observers) {
                observer.notify(ballPosition);
            }
        }

        public void doSomethingWithFootballPosition() {
            //bounce etc
            notifyListeners();
        }
    }

    private static interface FootballObserver {
        void notify(Position ball);
    }

    private static class Player implements FootballObserver {
        public void notify(Position ball) {
            System.out.println("received new ball position");
        }
    }

    public static void main(String... args) {
        FootballObserver player1 = new Player();
        Ball football = new Ball();
        football.registerObserver(player1);
        football.doSomethingWithFootballPosition();
    }
于 2012-04-29T19:45:21.360 に答える
1

必要なリスナーを作成するのに問題はありませんが、それを期待するクラスにのみ適用できます (したがって、実行できません(new Object()).addMyListener) 。

リスナーを使用するクラスにメソッドを追加する必要がありますaddMyListener(MyListener myListener)。後でユーザーが使用できるように、渡したリスナーをリストに保存するだけです。addMyListener メソッド (およびfireMyListeners()) メソッドを使用してインターフェースを作成することもお勧めします。

もちろん、fireMyListeners()メソッドを呼び出すコードも提供する必要があります。次に、fireMyListeners()リスナーをループして、リスナーの通知メソッドを呼び出します。

于 2012-04-29T19:38:26.070 に答える