PDA

View Full Version : [JAVA] Pulsanti disabilitati rispondono lo stesso agli eventi


Drakar Rain
14-02-2008, 16:05
Salve a tutti, avrei un problema.
Sto facendo un lavoro in java e mi succede una cosa nuova.
I pulsanti disabilitati rispondono comunque all'evento clic del mouse. Non so se rispondono anche ad altro, ma a quello sicuro.
Ho cercato un pò in giro ma non ho trovato niente, qualcuno saprebbe aiutarmi?

Grazie mille. Ciao :)

andbin
14-02-2008, 16:30
I pulsanti disabilitati rispondono comunque all'evento clic del mouse.Ma non è una cosa "strana" o un "baco", se è questo che stavi pensando.

MouseEvent è un evento "low-level" e non centra il fatto che hai a che fare con un pulsante, anche disabilitato. Quello che è sicuro è che se il pulsante è disabilitato, certamente non invia l'evento ActionEvent agli ActionListener. Perché è proprio ActionListener il listener che devi usare per "sentire" l'azione sul pulsante!

Drakar Rain
14-02-2008, 16:34
scusa ma non ho capito.
Quindi, come evento per azionare il button, cosa devo utizzare invece di MouseClicked?

wingman87
14-02-2008, 17:12
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/ActionListener.html

PaVi90
17-02-2008, 08:49
Riuppo la discussione perchè mi capita lo stesso inconveniente. In pratica se scrivo l'istruzione MioPulsante.setEnabled(false) il pulsante si disabilita ma, cliccandolo, comunque fa ciò che deve fare quando è abilitato... come disabilitare all'utente il pulsante??
Premetto che sono agli albori della programmazione visuale in java... in due giorni ho imparato i rudimenti delle GUI partendo da meno di zero :stordita:
:help:

wingman87
17-02-2008, 09:01
Devi usare il Listener che ho linkato nel mio post precedente, il motivo l'ha spiegato andbin più su

PaVi90
17-02-2008, 09:16
Devi usare il Listener che ho linkato nel mio post precedente, il motivo l'ha spiegato andbin più su
Non ho capito bene cosa fa.... in pratica una volta che cro l'object listener "ActionListener", nel codice cosa devo scrivere per disabilitare il pulsante??
Grazie ancora

andbin
17-02-2008, 09:59
Non ho capito bene cosa fa.... in pratica una volta che cro l'object listener "ActionListener", nel codice cosa devo scrivere per disabilitare il pulsante??button.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
// .... il pulsante è stato cliccato ....
}
});
Il fatto è che actionPerformed viene invocato quando si clicca sul pulsante ma solo se il pulsante è abilitato. Ed è questo il modo corretto per ricevere la notifica del click di un pulsante.

Non a "basso livello" con MouseListener.

PaVi90
17-02-2008, 10:07
OK, ora mi è chiaro... ma qual è l'istruzione specifica (il metodo) per disabilitare il pulsante?

andbin
17-02-2008, 10:13
OK, ora mi è chiaro... ma qual è l'istruzione specifica (il metodo) per disabilitare il pulsante?In generale per tutti i componenti:
setEnabled(boolean enabled)

PaVi90
17-02-2008, 10:20
In generale per tutti i componenti:
setEnabled(boolean enabled)
Il problema è che vorrei che il pulsante si disabilitasse dopo che viene cliccato una volta; tuttavia, almeno nell'ActionListener, funziona (cioè si disabilita dal clic) però continua a sortire l'effetto dovuto al clic del mouse sul pulsante in questione... quindi rimuovendo l'ascoltatore ActionListener e trasportando tutto il codice in ActionPerformed dovrebbe funzionarmi correttamente il metodo setEnabled?

andbin
17-02-2008, 10:44
Il problema è che vorrei che il pulsante si disabilitasse dopo che viene cliccato una volta; tuttavia, almeno nell'ActionListener, funziona (cioè si disabilita dal clic) però continua a sortire l'effetto dovuto al clic del mouse sul pulsante in questione... quindi rimuovendo l'ascoltatore ActionListener e trasportando tutto il codice in ActionPerformed dovrebbe funzionarmi correttamente il metodo setEnabled?Se nel actionPerformed() disabiliti il pulsante con setEnabled(false), il pulsante verrà disabilitato e actionPerformed() non verrà più chiamato se clicchi sul pulsante finché non lo riabiliti successivamente (da qualche altra parte o a seguito di qualcos'altro).

PaVi90
17-02-2008, 11:08
Se nel actionPerformed() disabiliti il pulsante con setEnabled(false), il pulsante verrà disabilitato e actionPerformed() non verrà più chiamato se clicchi sul pulsante finché non lo riabiliti successivamente (da qualche altra parte o a seguito di qualcos'altro).

Perfetto; invece nell'ActionListener tutto ciò non avveniva, vero? Per questo il pulsante, anche se apparentemente disabilitato, continuava a fungere?

EDIT: funziona tutto benissimo; grazie per i consigli!! ;)