2012-12-21 24 views
9

Ho lavorato con listener di eventi in AS3, ma sembra che non ci sia nessuno in java (eccetto per i componenti grafici). È sorprendente.Listener di eventi in Java

La domanda è: come posso implementare il mio listener di eventi in java? Forse qualcuno ha fatto quel lavoro prima?

risposta

13

È possibile definire un'interfaccia Listener:

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

Poi nel codice:

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

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

Poi nel someObject (in pratica si sarebbe probabilmente in possesso di un elenco di ascoltatori):

public class SomeObject { 
    private EventListener lst; 

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

    public void somethingHappened() { 
     lst.fireEvent(new Event("Something Happened")); 
    } 
} 
+0

puoi anche tenere la lista fuori dagli ascoltatori. Quindi, invece del metodo setListener, create addListener(), removeListener(), removeAllListeners(); –

+2

Funziona come lo schema dell'osservatore, vero? –

+4

@WlofrevoKcast Sì, è lo schema dell'osservatore. – assylias

3

Prima di tutto hai bisogno di qualche fonte di eventi, così puoi ascoltarlo attacante. Se hai bisogno di un listener personalizzato, devi anche implementare la sorgente personalizzata.

In Java è possibile trovare fonti esistenti e interfacce listener. Come hai detto, la GUI si basa solitamente su eventi. Se si è in 3D, i motori di rendering forniscono l'API appropriata (ad esempio collision detection), i hook del file system, le proprietà cambiano gli ascoltatori (Android).

Dipende da quali sono le vostre esigenze. Per la maggior parte degli usi ci dovrebbe essere già una libreria che ti fornisca l'API appropriata.

Mentre si implementa la propria soluzione, per la gestione di eventi a livello di applicazione l'Event Bus potrebbe essere una buona scelta. Il mio preferito è l'attuazione nella biblioteca Guava: http://code.google.com/p/guava-libraries/wiki/EventBusExplained

+0

Con sorgente intendi un oggetto che invierà un evento? –

+0

@Wlofrevo Kcast - Sì l'oggetto che riconoscerà la situazione, creerà e invierà l'evento. –

2

è possibile implementare tipo di ascoltatori in Java che si estende Observable classe per gli oggetti da osservare, e gli ascoltatori, è implementare Observer.

Problemi correlati