Utilisation de getSource pour les actions sur des composants de types inconnus

Je veux suivre les composants spécifiques cliqués dans un ordre spécifique.

J'utilise getSource et des drapeaux comme ceci:

public void actionPerformed(ActionEvent e) {

JButton q = (JButton)e.getSource();
JRadioButton w = (JRadioButton)e.getSource();

    if (q.equals(mybutton)) {
        if (flag == false) {
            System.out.print("test");
            flag = true;
        }
    }

Cela fonctionne parfaitement pour JButtons, le problème est également de l'utiliser pour JRadioButtons. Si j'utilise getSource sur les deux, cliquez sur un bouton et il en résultera une erreur d'exception de cast car le bouton ne peut pas être converti en un radiobutton.

Comment puis-je contourner ce problème?

0

1 Réponses

if(e.getSource() == radBtn1){
//do something
}  

En ce qui concerne le problème de distribution de classe, vous devez utiliser instanceof pour vérifier à quelle classe appartient la source de l'événement. Si la cause était un JButton et que vous le transtypiez en JRadioButton aveuglément, cela entraînerait une exception. Tu en as besoin:

Object source = e.getSource();
if (source instanceof JButton){
  JButton btn = (JButton) source;
} else if (source instanceof JRadioButton){
  JRadioButton btn = (JRadioButton) source;
}
0
ajouté
@ user2079483 Lorsque vous déclarez votre JRadioButton , initialisez-le simplement en null . Ensuite, utilisez le constructeur quelque part pour lui donner une valeur.
ajouté l'auteur Little Child, source
Merci d'avoir répondu. J'ai essayé using instanceof mais j'obtiens l'erreur "la variable [le Jbutton/Jradiobutton] n'a peut-être pas été initialisée" des états if.
ajouté l'auteur user2079483, source