Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problema Listener

  1. #1

    problema Listener

    Salve a tutti.
    Il mio problema è il seguente: alla fienestra della GUI ho associato due listener, uno per il mouse e l'alro per la tastiera con i metrodi della classe Component addMouseListener e addKeyListener, ma quando il focus cade su un qualsiasi altro componente (ad esempio su una JTexArea) gli eventi non vengono più ascoltati, per farli acoltare devo necessariamente associare i suddetti metodi ad ogni singolo componente, lavoro molto dispendioso e macchinoso. Mi domando come si fa ad associare i listener senza doverlo fare per ogni componente.
    Ringrazio in anticipo per le risposte.
    Ciao....

  2. #2

    Re: problema Listener

    Originariamente inviato da guidobattaglia
    Salve a tutti.
    Il mio problema è il seguente: alla fienestra della GUI ho associato due listener, uno per il mouse e l'alro per la tastiera con i metrodi della classe Component addMouseListener e addKeyListener, ma quando il focus cade su un qualsiasi altro componente (ad esempio su una JTexArea) gli eventi non vengono più ascoltati, per farli acoltare devo necessariamente associare i suddetti metodi ad ogni singolo componente, lavoro molto dispendioso e macchinoso. Mi domando come si fa ad associare i listener senza doverlo fare per ogni componente.
    Ringrazio in anticipo per le risposte.
    Ciao....
    Una soluzione è posta nel tuo stesso quesito.
    L'alternativa consiste nel definire un solo listener che quindi associ a tutti i componenti.

    La scelta tra le due, in genere, può dipendere da esigenze progettuali e/o di leggibilità del codice.

  3. #3
    Ti ringrazio della risposta, anche io ci avevo pensato; creare una classe che implementasse diverse interfacce Listener e regitrarle ai componenti... Ma tutto ciò è molto dispendioso e macchinoso, soprattutto se si deve lavorare con codici costruiti da altri, significherebbe andare a spulciare tutti i componenti della GUI e registrare il listener. Non è quello che voglio. E sinceramente non ci credo che in java non si possa fare...

    Grazie comunque....

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    La verità è che non si capisce che cosa tu voglia fare. Se voglio parlare con Pluto, mi aspetto che sia Pluto a rispondere. Ma se ad un certo punto mi rivolgo a Pippo o all'odioso Topolino, Pluto deve starsense quieto e tranquillo, a meno che non sia io a dirgli di prendere parte alla conversazione. E' ovvio che se sposti l'attenzione da un componente all'altro, gli eventuali listener registrati sul primo componente smettano di ascoltare, visto che probabilmente di eventi scatenanti l'azione non ve ne siano più.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io in questo caso farei

    codice:
    MioComponente extends Componente{}
    e a questo associo il listener con comportamento automatico
    RTFM Read That F*** Manual!!!

  6. #6

    soluzione trovata

    Ragazzi ho trovato la soluzione.
    Nella classe che implementa la GUI:

    public class xxxxx extends JFrame {

    ................
    ................
    ................
    // rilevatore è la classe listener che ascolta gli eventi che derivano dalla JFrame
    // e da tuti i suoi componenti grafici
    rilevatore riv= new rilevatore();
    Toolkit toolkit= getToolkit();
    toolkit.addAWTEventListener(riv, AWTEvent.MOUSE_EVENT_MASK);
    toolkit.addAWTEventListener(riv, AWTEvent.KEY_EVENT_MASK);

    }


    public class rilevatore implements AWTEvent {

    public void eventDispatched(AWTEvent e){
    MouseEvent m = (MouseEvent) e;
    if(! (m==null)) {
    posizioni[conta][0]=m.getXOnScreen();
    posizioni[conta][1]=m.getYOnScreen();

    System.out.println("Screen" + posizioni[conta][0] + " " + posizioni[conta][1]);
    conta++;
    }

    }

    In questo modo tutti gli eventi che derivano dal mouse su un qualsiasi componente grafico
    vengono comunicati all'AWEvent che poi tramite il cast diviene un oggetto MouseEvent e da qui utilizzando i metodi di quest'ultima classe si ricavano tutti gli eventi..

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.