Oppure

Loading
11/05/10 10:03
ddemarch
Salve,
c'è un modo per sostituire l'icona in un jButton immediatamente dopo la pressione del pulsante?
Mi spiego meglio: attualmente una volta premuto il pulsante viene prima chiamato il metodo impostato e una volta terminato viene sostituita l'icona. Vorrei che l'icona venisse sostituita prima della chiamata del metodo (essendo un simbolo di attesa).

vi posto il codice com'è ora:

if (event.getActionCommand().equals("Invia")){
                    jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/wait.gif")));


                    guiInvio invio = new guiInvio();

                    if(!invio.Test()){
                         //....
                    }


Grazie in anticipo! :k:
aaa
11/05/10 17:07
bububs
c'è un modo per sostituire l'icona in un jButton immediatamente dopo la pressione del pulsante?


Tramite il metodo mouseReleased di MouseListener si dovrebbe risolvere il problema. Questo metodo ha la particolarità che quando si rilascia il pulsante sull'oggetto che ha l'ascoltatore si verificano le operazioni presenti tra le sue graffe.
Prova così:

Al pulsante colleghi un ascoltatore di tipo MouseListener :
JButton1.addMouseListener(new CambioImmagine());


Poi crei la classe che estende a mouseListener :
public class CambioImmagine extends MouseAdapter{
public void mouseReleased(MouseEvent e){
  JButton1.setIcon((new javax.swing.ImageIcon(getClass().getResource("/img/wait.gif"))); 
}
}


Prova così, casomai mi fai sapere!!!:k:
Ultima modifica effettuata da bububs 11/05/10 17:11
aaa
12/05/10 8:41
ddemarch
Bububs ti ringrazio ma purtroppo nemmeno la tua proposta funziona. :(
Il comportamento del pulsante rimane lo stesso..
Ho notato che il cambiamento dell'icona è lento anche se è l'unica azione che faccio fare in risposta dell'evento. Sembra che le chiamate a metodi esterni alla classe vengano eseguiti prima di sostuituire l'icona anche se è messa come prima istruzione..

aaa
12/05/10 9:30
netarrow
prova a richiamare l'istruzione di di cambio icona da un SwingUtilities.invokeLater: java.sun.com/j2se/1.4.2/docs/api/javax/swing/…(java.lang.Runnable)
aaa
12/05/10 12:39
ddemarch
Ancora niente..
Sempre la solita storia, aggiorna sempre dopo l'esecuzione del metodo chiamato.. Mah..:_doubt:
aaa
12/05/10 14:23
netarrow
prova allora un invokeAndWait, sempre della classe SwingUtilities.

ah si dimenticavo, quello che di fatto fai nell'evento (intesa proprio l'attività da fare al di la del cambio icona) deve stare in un thread a parte, questo evidentemente non era così scontato:

la tua funzionalità sta in un thread diverso da quello sul quale gira la gui e il dispatcher degli eventi, e dal tuo thread richiami SwingUtilities.invokeLater per modificare la gui che girerà sul thread principale
Ultima modifica effettuata da netarrow 12/05/10 14:27
aaa
17/05/10 12:54
ddemarch
Grandissimo netarrow!! :hail:

Ora funziona esattamente come volevo :D

Grazie mille!
aaa