簡體   English   中英

用Java創建自定義監聽器

[英]Creating Custom Listeners In Java

我想知道如何為某些東西創建我自己的監聽器,並且能夠像任何其他監聽器一樣使用它,例如。

public interface Listener {

    public void onListen(Event e);

}

然后在我的班上

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

我想我真正要問的是,我在哪里定義如何檢查是否發生了與我創建的監聽器有關的事情?

如果其中任何一個沒有意義,請告訴我,我會澄清它。

如果充其量這對你沒有意義,我會嘗試這個。 如何讓偵聽器檢查組合框中的選定選項是否已更改為其他選項。 我實際上並不需要一個組合框監聽器,這只是一個例子。

這是一個簡短的例子:

    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();
    }

創建所需的偵聽器沒有問題,但是只能將它應用於期望它的類(所以你不能這樣做(new Object()).addMyListener

您需要向要使用偵聽器的類添加addMyListener(MyListener myListener)方法。 它只是將您傳遞給它的偵聽器存儲在列表中供以后用戶使用。 使用addMyListener方法(以及fireMyListeners() )方法創建接口也是一個好主意。

當然,您還必須提供代碼來調用fireMyListeners()方法。 然后fireMyListeners()將循環遍歷監聽器並調用他們的通知方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM