web-dev-qa-db-fra.com

Détection d'un changement d'état de JRadioButton

Comment puis-je détecter lorsqu'un JRadioButton est modifié de "non sélectionné" à "sélectionné" lorsque l'utilisateur clique avec la souris? J'ai essayé d'utiliser un ActionListener sur le bouton, mais ce dernier est déclenché à chaque fois que l'utilisateur clique sur le bouton radio, pas seulement lorsqu'il passe à l'état "sélectionné".

J'ai envisagé de conserver une variable booléenne qui se souvient de l'état du bouton et de la tester dans ActionListener pour voir si elle devait être modifiée, mais je me demande s'il existe une solution bien meilleure ou plus propre.

28
cgull

Regardez JRadioButton. addItemListener ()

EDIT: Il est peu probable que vous souhaitiez utiliser changeListener car il se déclenche plusieurs fois par clic. Un élémentListener ne se déclenche qu'une fois par clic. Voir ici

EDIT2: Juste pour développer, un actionListener sur un jradioButton sera déclenché chaque fois qu'un utilisateur clique dessus, même s'il est déjà sélectionné. si c'est ce que vous voulez, d'accord, mais je trouve cela agaçant. Je veux seulement être averti s'il est sélectionné ou désélectionné.

ChangeListener déclenche toutes sortes de choses, ce qui signifie que votre auditeur recevra 5 événements ou plus par clic. Pas bon.

Un itemlistener sera déclenché seulement si l'état sélectionné ou désélectionné change. Cela signifie qu'un utilisateur peut cliquer dessus plusieurs fois et ne se déclenchera pas s'il ne change pas. Dans votre méthode de gestionnaire, vous devrez avoir un bloc if pour vérifier le statut SELECTED ou DESELECTED et faire ce que vous voulez:

@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.
    }
}

Cela fonctionne simplement mieux parce que vous savez que si vous êtes dans la méthode, le bouton radio vient d'être sélectionné ou désélectionné, mais l'utilisateur ne fait que taper sur l'interface pour une raison inconnue. 

47
Nemi

Je pense que vous souhaitez ajouter une implémentation ChangeListener.

0
Rob Di Marco