SORU
1 HAZİRAN 2010, Salı


GWT Özel Olaylar

Hey bir sorun, özel GWT olay İşleyicileri nasıl etrafında başımı almak zorundayım. Bu konu hakkında oldukça çok şey okudum ve hala Sisli nedir biraz. Burada ipler bu GWT Custom Event Handler gibi Stackoverflow üzerinde okudum. Birisi aşağıdaki gibi uygulanan bir mannar bunu açıklayabilir.

2 sınıflar bloğu ve adam bir Dersim var. Adam olay harekete bloğu ile çarpıştı (() onCollision ) ve daha sonra block sınıfı için bu olayı dinler.

Teşekkürler

CEVAP
3 HAZİRAN 2010, PERŞEMBE


Genel olarak olaylar:

Olaylar her zaman bir şey (örneğin durum değişikliği) hakkında bilgilendirmek için gönderilir. Hadi bir adamla seni örnek alıp bir duvar. Burada bir kullanıcı bir labirent içinde bir adam olarak dolaşabileceği bir oyun olduğunu hayal edebiliriz. Her zaman bir kullanıcı için (örneğin, bir duvar yıkılmış bir duvar olarak kendini işleyebilen) tepki böylece çarpışma hakkında bilgi sahibi olmalıdır duvara toslayacaktır. Bu çarpışma olayı bir duvar ile çarpışma algılanır her zaman göndererek elde edilebilir. Bu olay bir adam tarafından gönderilir ve sistem olay ile ilgilenen her nesneyi alır ve ona göre tepki verebilir. Olayları almak için hangi nesneleri, olay ile ilgili olarak kendilerini kayıt olmalısınız.

Bu olaylar her sistem veya çerçeve içinde genel olarak (sadece GWT) nasıl çalışır. Ve bu sistemlerde olayları göndermek ve almak için tanımlamak gerekir:

  1. Ne gönderilir (olaylar gibi)
  2. (Olay alıcıları) alır
  3. (Olay gönderenler) gönderir

Sonra:

  1. Olayları almak istiyorum hangi olay alıcıları kaydedin
  2. Olaylar gönderin

GWT: olaylar

Burada GWT özel olayları kullanarak bir örnek göstereceğim. Bir posta kutusu kontrol etmek için gerekli olan örnek bir sistemi kullanmak ve eğer yeni mail varsa orada bir kullanıcı bilgilendireceğim. Hadi sisteminde en az 2 bileşeni vardır varsayalım:

  • mesaj denetleyicisi sorumlu posta kutusunu kontrol ediyorum
  • mesajı yeni postaları görüntülemek için displayer sorumlu

Mesaj denetleyicisi yeni bir posta ve mesaj displayer bu olaylar aldığında olaylar gönderir.

Adım 1: olayları Tanımlamak

Yeni bir posta hakkında bilgi MessageReceivedEvent sınıfının bir örneği olarak gönderilecektir. Sınıfa yeni bir posta sadelik String sadece öyle olduğunu farz edelim) içerir.

Bu sınıfın tam kaynak kodu (kaynak kodu aşağıda olduğu için açıklama) sundu.

public class MessageReceivedEvent extends GwtEvent<MessageReceivedEventHandler> {

    public static Type<MessageReceivedEventHandler> TYPE = new Type<MessageReceivedEventHandler>();

    private final String message;

    public MessageReceivedEvent(String message) {
        this.message = message;
    }

    @Override
    public Type<MessageReceivedEventHandler> getAssociatedType() {
        return TYPE;
    }

    @Override
    protected void dispatch(MessageReceivedEventHandler handler) {
        handler.onMessageReceived(this);
    }

    public String getMessage() {
        return message;
    }
}

MessageReceivedEventHandler olay alıcıları temsil eden bir arayüz. Şu anda bunu dert etmeyin, bu daha sonra ele alınacaktır.

Her sınıf GWT bir olayı temsil GwtEvent sınıf genişletmek için vardır. Bu sınıf, uygulanması gereken iki soyut yöntemler içerir: getAssociatedType dispatch. Her olay sınıfı içinde, ancak genellikle çok benzer bir şekilde uygulanır.

Sınıf alınan mesajı (kurucu) hakkında bilgi saklar. Her olay alıcısı getMessage yöntem geçebilirler.

Adım 2: olay alıcıları Tanımlamak

GWT her olay türü bir arabirim bu olay türü alıcıları temsil eden ilişkilidir. GWT alıcılar işleyicileri denir. Örnekte MessageReceivedEvent bir olay alıcı arabirimi MessageReceivedEventHandler basamaktır. Kaynak kodu aşağıda:

public interface MessageReceivedEventHandler extends EventHandler {
    void onMessageReceived(MessageReceivedEvent event);
}

Her işleyici EventHandler arayüzü genişletmek için vardır. Ayrıca, bir olay gerçekleştiğinde çağrılacak yöntemi (en az bir parametre bir olay sürer) tanımlamak gerekir. Burada yöntemi onMessageReceived olarak adlandırılır. Her alıcı bu yöntemi uygulayarak bir olay üzerine tepki verebilir.

Örnekte sadece olay alıcı MessageDisplayer bileşen

public class MessageDisplayer implements MessageReceivedEventHandler {

    @Override
    public void onMessageReceived(MessageReceivedEvent event) {
        String newMessage = event.getMessage();
        // display a new message
        // ...
    }

}

Adım 3: olay gönderenler Tanımlayın

Örnekte sadece olay Gönderen bileşen - EventChecker kontrol postaları sorumludur:

public class MessageChecker implements HasHandlers {

    private HandlerManager handlerManager;

    public MessageChecker() {
        handlerManager = new HandlerManager(this);
    }

    @Override
    public void fireEvent(GwtEvent<?> event) {
        handlerManager.fireEvent(event);
    }

    public HandlerRegistration addMessageReceivedEventHandler(
            MessageReceivedEventHandler handler) {
        return handlerManager.addHandler(MessageReceivedEvent.TYPE, handler);
    }

}

Her olay Gönderen HasHandlers arabirim uygulamak için vardır.

En önemli unsur burada HandlerManager bir alandır. GWT adı olarak HandlerManager olay işleyicileri (event alıcıları) yönetir öneririz. Başta da denildiği gibi olayları almak isteyen her olay alıcısı ilgi olarak kaydetmeniz gerekir. Bu işleyici yöneticileri içindir. Mümkün olan her kayıtlı olay işleyici için belirli bir olay gönderebilirler olay işleyicileri kayıt yapıyorlar.

HanlderManager oluşturulduğunda onun yapıcı bir tartışma sürüyor. Her olay kökenli bir kaynağı vardır ve bu parametre, tüm bu olaylar işleyicisi yöneticisi ile göndermek için bir kaynak olarak kullanılacaktır. Olayların kaynağı olarak this Bu örnekte MessageChecker.

Yöntemi fireEvent HasHandlers arabirimi olarak tanımlanan ve olayları göndermek için sorumludur. Gördüğünüz gibi sadece işleyicisi yöneticisi (yangın) ve olay göndermek için kullanır.

addMessageReceivedEventHandler olay alıcıları tarafından kendilerini olayları alıcı olarak ilgilenen kaydetmek için kullanılır. Yine işleyicisi yöneticisi bunun için kullanılır.

Adım 4: olay gönderenler ile Bağlama olayı alıcıları

Her şey tanımlandığında olay alıcıları olay gönderenler kendilerini kayıt olmalısınız. Bu genellikle nesnelerin oluşturulması sırasında yapılır:

MessageChecker checker = new MessageChecker();
MessageDisplayer displayer = new MessageDisplayer();
checker.addMessageReceivedEventHandler(displayer);

Şimdi tüm olayları checker tarafından gönderilen displayer tarafından alınır.

Adım 5: olaylar Gönderin

Olay, MessageChecker göndermek için bir olayı örnek oluşturmak ve fireEvent yöntemi kullanarak göndermeniz gerekir. Bu kamışı newMailReceived yöntem yapılması:

public class MessageChecker implements HasHandlers {

    // ... not important stuff omitted

    public void newMailReceived() {
        String mail = ""; // get a new mail from mailbox
        MessageReceivedEvent event = new MessageReceivedEvent(mail);
        fireEvent(event);
    }

}

Açık ve yardım:) umuyorum

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • sonia989

    sonia989

    26 EKİM 2006
  • Xbox

    Xbox

    1 Kasım 2005