Newsgroup: it.comp.java
Titolo: Mouse: come separare CLICK e DOPPIO_CLICK

Salve a tutti. Sono nuovo del newsgroup e non so se questa richiesta č gią
stata fatta in passato.
Ecco il mio problema:
"Ho l'esigenza all'interno di un'applicazione grafica in Java che usa Swing
di associare delle azioni distinte e separate agli eventi CLICK singolo e
doppio.
Le azioni che devo compiere non mi permettono di annullare in maniera
semplice quello che ho fatto allo scatenarsi del SINGOLO CLICK quando viene
riconosciuto il verificarsi di un evento DOPPIO_CLICK.
Le forme del tipo:
        if(e.getClickCount() >1)
        {
                doppioClick();
        }
        else
        {
                singoloClick();
        }
generano sempre una chiamata a singoloClick() seguita da una chiamata a 
doppioClick(), cosa che io non posso fare perché le operazioni compiute in 
singoloClick() non hanno niente a che vedere con quelle di doppioClick() e 
quindi, al verificarsi di doppioClick(), non posso annullare quello che ha 
fatto singoloClick(). Spero di essere stato chiaro.
Siccome sembra che il sistema di gestione degli eventi di Java, quando si fa
DOPPIO_CLICK con il mouse, scateni sempre l'evento SINGOLO_CLICK prima di
quello doppio, come posso fare a separare questo comportamento? Non riesco a
capire o a trovare documentazione in cui ci si trovi nella mia stessa
situazione. I tutorial che ho trovato, annullano le operazioni fatte dal
SINGOLO_CLICK quando si capisce che si tratta di un DOPPIO_CLICK, ma, poiché
la mia applicazione deve funzionare in RETE, capite che non č semplice
gestire un protocollo di annullamento di un'operazione che gią č stata
iniziata su un bel numero di altri computers."
Possibile che non esista un metodo semplice per fare in modo di separare lo
scatenarsi degli eventi SINGOLO_CLICK e DOPPIO_CLICK?
Se qualcuno ha trovato la soluzione al mio problema nei suoi precedenti
lavori, lo prego di aiutarmi con un consiglio.
Grazie anticipatamente! 

 Grazie anticipatamente!
Scusa, ma non è un po' bislacco associare ad un componente un'azione
per entrambe le circostanze?

 ha scritto nel messaggio 
news:1157026302.2...@e3g2000cwe.googlegroups.com...


 lavori, lo prego di aiutarmi con un consiglio.
Anche io ho avuto questo problema passando da Java 1.4 a Java 1.5.
Ho scoperto che nella 1.4 se fai doppio click viene lanciato solo
l'evento per il doppio click mentre in Java 1.5 vengono lanciati
entrambi.. cosa che non mi è piaciuta..
Per risolvere ho fatto così: (forse non molto pulito ma funziona e non
mi è venuto in mente altro).
Nell'evento che gestisce il click singolo fai partire un altro thread e
vai in sleep per pochi millisecondi (molto pochi altrimenti
l'applicazione non risponde bene al doppio click ma non troppo pochi
altrimenti non funziona..).
Intanto, se hai fatto doppio click, Java fa partire l'evento del doppio
click (ecco perché il thread, altrimenti blocchi gli eventi). In
questo metodo setti una variabile a true ed esegui il codice.
Intanto il thread del singolo click si è svegliato e controlli la
variabile. Se è true allora esci (hai eseguito il doppio click), se è
false esegui il singolo click.
Al termine del SINGOLO click risetti la variabile a false (se la
risetti nel doppio click rischi di settarla prima del risveglio).
In tutto questo è fondamentale il tempo di sleep.. se lo scegli bene
funzionerà tutto e l'utente non si accorgerà dell'attesa nel singolo
click.

 
Mi sembra una soluzione che possa funzionare ma probabilmente per 
evitare la creazione di troppi thread userei uno Swing timer 
(javax.swing.Timer), vedi anche:
http://java.sun.com/docs/books/tutorial/uiswing/misc/timer.html
In alternativa, per compiti più complessi, anche un util timer 
(java.util.Timer)
Ciao,
    Bruno
P.S.
Il JavaDay è qui!
http://www.javaday.it
-- 
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
| Coordinatore del JUG Torino - 
http://www.jugtorino.it

 ha scritto nel messaggio 
news:1157097925....@e3g2000cwe.googlegroups.com...
