Listener

di il
8 risposte

Listener

Salve! Vorrei chiarire un dubbio: un listener, come si crea? Intendo, sarebbe un thread parallelo agli altri "ripieno" di if?

8 Risposte

  • Re: Listener

    Koyote ha scritto:


    Salve! Vorrei chiarire un dubbio: un listener, come si crea? Intendo, sarebbe un thread parallelo agli altri "ripieno" di if?
    Se intendi un listener come inteso nelle interfacce grafiche AWT/Swing, innanzitutto un listener è descritto da una interface Java che elenca i metodi che dovranno essere implementati da chi vuole ricevere gli eventi. Tipo ad esempio la interfaccia ActionListener.
    In AWT/Swing i listener per convenzione derivano da java.util.EventListener che è semplicemente una interfaccia vuota, di "marcatura".

    I metodi nei listener AWT/Swing hanno tipicamente un solo parametro di "evento" che racchiude più informazioni, tipo la classe ActionEvent. In AWT/Swing le classi XyzEvent derivano (direttamente o indirettamente) per convenzione da java.util.EventObject che incapsula solamente il concetto del "source" dell'evento.

    Per quei listener che hanno più metodi come MouseListener, viene fornita per comodità una classe di "adapter" chiamata es. MouseAdapter che semplicemente fornisce una implementazione "vuota" ( { } ) di tutti i metodi del listener. Questo ovviamente è un di più, non è obbligatorio fornirlo per un listener.

    Poi la classe "sorgente" degli eventi, es. JButton dovrà contenere un elenco di oggetti che implementano i listener e fornire quindi i classici addXyzListener/removeXyzListener. Dato che un componente può tipicamente gestire molti tipi di listener, per non sprecare risorse in Swing si utilizza di norma la classe javax.swing.event.EventListenerList (guarda il javadoc, è ben spiegato come usarlo) che semplicemente permette di memorizzare molti oggetti listener anche di tipo differente.
    Ma per cose basilari, nessuno vieterebbe di usare un banale java.util.Vector o meglio un CopyOnWriteArrayList per tenere la lista degli oggetti listener.

    Riguardo il threading, non è un listener di per sé che descrive/impone quale thread usare ... è il framework di componenti che lo stabilisce. In Swing tutta la gestione della interfaccia grafica è fatta in un solo ed unico thread (il "Event Dispatch Thread") ed è nel contesto di questo thread che vengono dispacciati gli eventi a tutti i listener registrati.
  • Re: Listener

    andbin ha scritto:


    Koyote ha scritto:


    Salve! Vorrei chiarire un dubbio: un listener, come si crea? Intendo, sarebbe un thread parallelo agli altri "ripieno" di if?
    Se intendi un listener come inteso nelle interfacce grafiche AWT/Swing, innanzitutto un listener è descritto da una interface Java che elenca i metodi che dovranno essere implementati da chi vuole ricevere gli eventi. Tipo ad esempio la interfaccia ActionListener.
    In AWT/Swing i listener per convenzione derivano da java.util.EventListener che è semplicemente una interfaccia vuota, di "marcatura".

    I metodi nei listener AWT/Swing hanno tipicamente un solo parametro di "evento" che racchiude più informazioni, tipo la classe ActionEvent. In AWT/Swing le classi XyzEvent derivano (direttamente o indirettamente) per convenzione da java.util.EventObject che incapsula solamente il concetto del "source" dell'evento.

    Per quei listener che hanno più metodi come MouseListener, viene fornita per comodità una classe di "adapter" chiamata es. MouseAdapter che semplicemente fornisce una implementazione "vuota" ( { } ) di tutti i metodi del listener. Questo ovviamente è un di più, non è obbligatorio fornirlo per un listener.

    Poi la classe "sorgente" degli eventi, es. JButton dovrà contenere un elenco di oggetti che implementano i listener e fornire quindi i classici addXyzListener/removeXyzListener. Dato che un componente può tipicamente gestire molti tipi di listener, per non sprecare risorse in Swing si utilizza di norma la classe javax.swing.event.EventListenerList (guarda il javadoc, è ben spiegato come usarlo) che semplicemente permette di memorizzare molti oggetti listener anche di tipo differente.
    Ma per cose basilari, nessuno vieterebbe di usare un banale java.util.Vector o meglio un CopyOnWriteArrayList per tenere la lista degli oggetti listener.

    Riguardo il threading, non è un listener di per sé che descrive/impone quale thread usare ... è il framework di componenti che lo stabilisce. In Swing tutta la gestione della interfaccia grafica è fatta in un solo ed unico thread (il "Event Dispatch Thread") ed è nel contesto di questo thread che vengono dispacciati gli eventi a tutti i listener registrati.
    So benissimo cos'è un listener, un thread ecc..., probabilmente avrai frainteso. La mia domanda è: se dovessi creare io un framework, come posso creare un mio listener?
  • Re: Listener

    Koyote ha scritto:


    So benissimo cos'è un listener, un thread ecc..., probabilmente avrai frainteso.
    Non ho frainteso nulla. Hai parlato di "listener" e io ti ho descritto come sono fatti i listener in Swing(/AWT) che è dove il termine "listener" si usa solitamente.
    E mi sembrava il minimo spiegare come sono fatti i listener (ripeto, in AWT/Swing, dato che non hai precisato) visto che la tua frase "sarebbe un thread parallelo agli altri "ripieno" di if?" non vuol dire assolutamente nulla.

    Koyote ha scritto:


    La mia domanda è: se dovessi creare io un framework, come posso creare un mio listener?
    Sai definire una interface Java? Sai tenere una "collezione" di oggetti che implementano una interfaccia? Sai invocare un metodo su un reference di tipo interfaccia?
    Questo è quello (il minimo) che serve.
  • Re: Listener

    andbin ha scritto:


    Koyote ha scritto:


    La mia domanda è: se dovessi creare io un framework, come posso creare un mio listener?
    Sai definire una interface Java? Sai tenere una "collezione" di oggetti che implementano una interfaccia? Sai invocare un metodo su un reference di tipo interfaccia?
    Questo è quello (il minimo) che serve.
    Certo che lo so
  • Re: Listener

    Koyote ha scritto:


    Certo che lo so
    Benissimo, quello è davvero il minimo. Il resto è solo questione di "design" a livello object-oriented.

    Quindi, scusa se lo chiedo, i dubbi su cosa sono e a che livello? Non riesci bene a "mettere insieme i pezzi"? Vuoi qualche esempio? (tra l'altro su un altro forum qui tra ieri e oggi sto spiegando proprio la questione degli eventi) Vuoi altre spiegazioni a livello teorico/concettuale?
  • Re: Listener

    andbin ha scritto:


    Koyote ha scritto:


    Certo che lo so
    Benissimo, quello è davvero il minimo. Il resto è solo questione di "design" a livello object-oriented.

    Quindi, scusa se lo chiedo, i dubbi su cosa sono e a che livello? Non riesci bene a "mettere insieme i pezzi"? Vuoi qualche esempio? (tra l'altro su un altro forum qui tra ieri e oggi sto spiegando proprio la questione degli eventi) Vuoi altre spiegazioni a livello teorico/concettuale?
    Io so utilizzare i listener già esistenti, il mio dubbio era sul crearne nel mio framework.
  • Re: Listener

    Koyote ha scritto:


    Io so utilizzare i listener già esistenti
    Ok.

    Koyote ha scritto:


    il mio dubbio era sul crearne nel mio framework.
    Innanzitutto di che tipo di framework stai parlando? Cioè, hai già realizzato (o stai realizzando) un framework?

    (detto comunque in generale: se uno "sa" realizzare un framework, in teoria non dovrebbe avere alcun problema con dei listener)
  • Re: Listener

    andbin ha scritto:


    Koyote ha scritto:


    Io so utilizzare i listener già esistenti
    Ok.

    Koyote ha scritto:


    il mio dubbio era sul crearne nel mio framework.
    Innanzitutto di che tipo di framework stai parlando? Cioè, hai già realizzato (o stai realizzando) un framework?

    (detto comunque in generale: se uno "sa" realizzare un framework, in teoria non dovrebbe avere alcun problema con dei listener)
    Non sto realizzando nulla, è una domanda puramente ipotetica.
Devi accedere o registrarti per scrivere nel forum
8 risposte