Domanda

Come posso rilevare quando un JRadioButton viene modificato da "non selezionato" a "selezionato" quando si fa clic con il mouse? Ho provato ad usare un ActionListener sul pulsante, ma questo viene attivato ogni volta che si fa clic sul pulsante di opzione, non solo quando cambia stato in "selezionato".

Ho pensato di mantenere una variabile booleana che ricorda lo stato del pulsante e testarlo all'interno di ActionListener per vedere se cambiarne lo stato, ma mi chiedo se esiste una soluzione molto migliore o più pulita.

È stato utile?

Soluzione

Guarda JRadioButton. addItemListener ()

EDIT: è improbabile che tu voglia utilizzare un changeListener poiché si attiva più volte per clic. Un itemListener si attiva una sola volta per clic. Vedi qui

EDIT2: solo per espandere questo, un ActionListener su un jradioButton si attiverà ogni volta che un utente fa clic su di esso, anche se è già selezionato. se è quello che vuoi, bene, ma lo trovo fastidioso. Voglio solo essere avvisato che è selezionato o deselezionato.

Un ChangeListener verrà attivato per ogni sorta di cose, il che significa che il tuo ascoltatore riceverà 5 o più eventi per clic. Non va bene.

Un listener di oggetti genererà solo se lo stato selezionato o deselezionato cambia. Ciò significa che un utente può fare clic su di esso più volte e non si attiverà se non cambia. Nel tuo metodo gestore dovrai avere un blocco se per verificare lo stato SELECTED o DESELECTED e fare qualunque cosa:

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        // Your selected code here.
    }
    else if (e.getStateChange() == ItemEvent.DESELECTED) {
        // Your deselected code here.
    }
}

Funziona meglio perché sai che se sei nel metodo allora il pulsante di opzione è stato appena selezionato o deselezionato, non che l'utente sta solo bussando all'interfaccia per qualche motivo sconosciuto.

Altri suggerimenti

Credo che tu voglia aggiungere un'implementazione ChangeListener .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top