Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java] Eventi

    ciao, avevo una piccola domanda da fare...

    io avrei bisogno in una particolare classe di lanciare degli eventi quando l'oggetto considerato si trova in un particolare stato... vi faccio 1 piccolo esempio:

    ho una classe Automobile,e ad esempio quando lo stato delle var di istanza indica ke è senza benzina, voglio lanciare un evento cosicchè la classe che ha inizializzato l'oggetto possa decidere cosa fare di conseguenza.

    a me va benissimo usare come eventi quelli appartententi alla classe ActionEvent, ma il fatto è ke non so come lanciarli. ho visto ke alcune classi swing (e forse anke awt) hanno il metodo "fire...()" dove, al posto dei puntini c'è il tipo di evento lanciato. ho pensato di fare la stessa cosa nella mia classe, ma nn ho idea di come implementare il metodo. ovviamente sarà poi necessario un metodo "addActionListener()" ke verrà chiamato dalla classe superiore x monitorare l'oggetto.

    effettivamente non è una domanda molto semplice, spero qualcuno riesca ad aiutarmi. grazie x l'attenzione
    Fede

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Se vuoi seguire il funzionamento degli eventi in java devi definire un evento personalizzato, estendendo la classe EventObject. Esempio:

    Codice PHP:
    class MyStatusEvent extends EventObject{
            
        public 
    MyStatusEvent(Object source){
            
    super(source);
        }

        
    //piu eventuali altri metodi pubblici...

    Quindi definisci un'interfaccia che estende EventListener che definisce quali metodi devono essere implementati da un ascoltatore di tale evento:

    Codice PHP:
    interface MyStatusEventListener extends EventListener{
        
        
    //Metodi da implementare per essere un ascoltatore di MyStatusEvent
        
    public void myStatusChangedEvent(MyStatusEvent e);

        
    //eventuali altri metodi

    Ora, quando vuoi metterti in ascolto di un evento ti devi registrare come un ascoltatore sull'oggetto che solleva l'evento: la classe che solleva gli eventi deve quindi offrire dei metodi per registrare e deregistrare un listener:

    public void addMyStatusEventListener(MyStatusEventListener l);

    e

    public void removeMyStatusEventListener(MyStatusEventListener l);


    I listener li puoi raccogliere ad esempio in un Vector; ogni volta che devi generare l'evento, crei un MyStatusEvent evt, passandogli come argomento il riferimento this per esempio (cioè l'oggetto che sta sollevando l'oggetto), e per ogni listener registrato, invochi il metodo myStatusChanchedEvent(evt).

    In particolare, visto che puoi voler sollevare eventi in piu punti del codice puoi definirti nella classe che solleva gli eventi un metodo

    private fireMyStatusChangedEvent()

    all'interno del quale ti crei l'oggetto evento MyStatusEvent:

    MyStatusEvent evt = new MyStatusEvent(this);

    e poi per ogni listener presente nel vettore dei listener invochi il metodo myStatusChangedEvent(evt).

    Ovviamente nella classe MyStatusEvent puoi definire altri metodi pubblici per ricavare informazioni sull'evento, ad esempio per sapere qual è il valore del nuovo stato. Tieni presente che dato che MyStatusEvent estende EventObject, su un MyStatusEvent evt puoi invocare il metodo

    Object getSource();

    (evt.getSource())per avere l'oggetto che ha lanciato l'evento, e che è stato passato al costruttore di MyStatusEvent al momento della costruzione di evt.


  3. #3
    se nn vuoi usare gli eventi puoi benissimo usare i thread e giocare un pochino sui loro stati (Ready - Not Ready eccc.)
    HiFly !!!!!!!!!!!!!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Una soluzione alternativa ma molto molto semplice da usare (non ti devi preoccupare di gestire nessun evento) è costituita dal paradigma Observer/Observable: hai una classe Observable che può essere osservata da una o più altre classi chiamate Observer (osservatori). Al verificarsi di un determinato evento (che decidi tu!!) puoi fare in modo che le classi osservatrici vengano automaticamente avvisate dal sistema del cambiamento. E' una delle tante belle cose che Java mette a disposizione che semplificano di molto la vita al programmatore.

    Se vuoi puoi dare un'occhiata qui, per la documentazione relativa agli Observer e agli Observable:

    Observer: http://java.sun.com/j2se/1.4.2/docs/.../Observer.html

    Observable: http://java.sun.com/j2se/1.4.2/docs/...bservable.html


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie 1000 x il vostro aiuto, ora allora provero'!!! penso di utilizzare il metodo degli eventi, mi ispira di +, anke se quello di observer/observable e' molto buono!!!

    grazie ancora
    Fede

  6. #6
    Originariamente inviato da LeleFT
    Una soluzione alternativa ma molto molto semplice da usare (non ti devi preoccupare di gestire nessun evento) è costituita dal paradigma Observer/Observable: hai una classe Observable che può essere osservata da una o più altre classi chiamate Observer (osservatori). Al verificarsi di un determinato evento (che decidi tu!!) puoi fare in modo che le classi osservatrici vengano automaticamente avvisate dal sistema del cambiamento. E' una delle tante belle cose che Java mette a disposizione che semplificano di molto la vita al programmatore.

    Se vuoi puoi dare un'occhiata qui, per la documentazione relativa agli Observer e agli Observable:

    Observer: http://java.sun.com/j2se/1.4.2/docs/.../Observer.html

    Observable: http://java.sun.com/j2se/1.4.2/docs/...bservable.html


    Ciao.

    fra l'altro è la situazione più adatta, dal momento in cui il listener è concepito per essere utilizzato per gli elementi grafici

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    49
    Originariamente inviato da anx721


    Ora, quando vuoi metterti in ascolto di un evento ti devi registrare come un ascoltatore sull'oggetto che solleva l'evento: la classe che solleva gli eventi deve quindi offrire dei metodi per registrare e deregistrare un listener:

    public void addMyStatusEventListener(MyStatusEventListener l);

    e

    public void removeMyStatusEventListener(MyStatusEventListener l);


    I listener li puoi raccogliere ad esempio in un Vector; ogni volta che devi generare l'evento, crei un MyStatusEvent evt, passandogli come argomento il riferimento this per esempio (cioè l'oggetto che sta sollevando l'oggetto), e per ogni listener registrato, invochi il metodo myStatusChanchedEvent(evt).

    Sto provando a realizzare un evento personalizzato seguendo questa piccola guida. Non capisco però cosa occorre inserire nei corpi dei metodi: addMyStatusEventListener e removeMyStatusEventListener.
    Ma come bisogna fare per scatenare l'evento?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.