web-dev-qa-db-fra.com

Comment puis-je vérifier que JButton est pressé? Si isEnabled () ne fonctionne pas?

Comment puis-je vérifier que JButton est pressé? Je sais qu'il existe une méthode qui s'appelle "isEnabled"

Alors j'essaie d'écrire un code à tester.

  1. ce code a 2 boutons qui sont des boutons "Ajouter" et "Commander".
  2. le code indiquera que le message "Le bouton Ajouter est enfoncé" lorsque j'appuie sur le bouton "Valider" après avoir appuyé sur le bouton "Ajouter" mais si le bouton "Ajouter" n'est pas enfoncé avant que le bouton "Valider" ne soit enfoncé, le code affiche le Message "Le bouton Ajouter n'est pas enfoncé".

Voici le code:

final JButton btnAdd = new JButton("Add");
btnAdd.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    }
});
panel.add(btnAdd);
JButton btnConfirm = new JButton("Check Out");
btnConfirm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (btnAdd.isEnabled()) {
            System.out.println("Add Button is pressed");
        }
        if (!btnAdd.isEnabled()) {
            System.out.println("Add Button is not pressed");
        }
    }
});

Lorsque je lance ce code, le code ne donne que le bouton "Ajouter", bien que je n'aie pas appuyé sur le bouton "Ajouter". Pourquoi ça se passe comme ça?

4
Dexter Moregan

JButton a un modèle qui répond à cette question:

  • isArmed()
  • isPressed()
  • isRollOVer() 

etc. Par conséquent, vous pouvez demander au modèle la réponse que vous recherchez:

     if(jButton1.getModel().isPressed())
        System.out.println("the button is pressed");
13
Sage

Il semble que vous deviez utiliser JToggleButton :

JToggleButton tb = new JToggleButton("Push me");
tb.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        JToggleButton btn =  (JToggleButton) e.getSource();
        btn.setText(btn.isSelected() ? "pushed" : "Push me");
    }
});
3
alex2410

JButton#isEnabled modifie l'interactivité utilisateur d'un composant, c'est-à-dire si un utilisateur est capable d'interagir avec lui (appuyez dessus) ou non.

Lorsque vous appuyez sur une JButton, un événement actionPerformed est déclenché.

Vous recevez Add button is pressed lorsque vous appuyez sur le bouton de confirmation, car le bouton Ajouter est activé. Comme indiqué, cela n’a rien à voir avec le démarrage appuyé du bouton.

En fonction de votre code, si vous essayez de vérifier le début "actionné" du bouton d'ajout dans la variable ActionListener du bouton de confirmation, il sera toujours faux, car le bouton sera à l'état activé uniquement pendant l'appel de la variable ActionListener du bouton d'ajout.

Sur la base de toutes ces informations, je suggérerais que vous envisagiez d'utiliser une variable JCheckBox que vous pouvez ensuite utiliser JCheckBox#isSelected pour déterminer si elle a été vérifiée ou non.

Examinez de plus près Comment utiliser les boutons pour plus de détails

2
MadProgrammer

Il suffit de faire System.out.println(e.getActionCommand()); dans la fonction actionPerformed(ActionEvent e). Cela vous indiquera quelle commande vient d'être exécutée.

ou

if(e.getActionCommand().equals("Add")){

   System.out.println("Add button pressed");
}
1
AJ.

La méthode que vous essayez d'utiliser vérifie si le bouton est actif:

btnAdd.isEnabled()

Lorsqu'il est activé, tout composant associé à cet objet est actif et peut déclencher la méthode actionPerformed de cet objet.

Cette méthode ne vérifie pas si le bouton est enfoncé.

Si je comprends bien votre question, vous souhaitez désactiver votre bouton "Ajouter" une fois que l'utilisateur a cliqué sur "Commander".

Essayez de désactiver votre bouton au début: btnAdd.setEnabled(false) ou après que l'utilisateur ait cliqué sur "Check out".

0
nillas