Question

J'ai ce code:

public class Window extends JFrame {
public Window(){
    ...

    JButton button = new JButton("OK");
    getContentPane().add(button);

    ButtonHandler handler = new ButtonHandler();
    button.addActionListener(handler);
    ...
}

private class ButtonHandler implements ActionListener {

    public void actionPerformed(ActionEvent event){

        if (event.getSource() == button){ // <--- "button can not be resolved"
            System.out.println("Hello");

        }               
    }
}

Je reçois cette erreur dans Eclipse. Je viens de faire un exemple (simplifié) trouvé dans un livre, ne sais pas ce qui peut se tromper. oeil Connaissances requises! :)

Était-ce utile?

La solution

Évitez d'avoir votre action ActionListener dépend de ce bouton a été pressé. Si vous avez des actions différentes pour les différents boutons définissent alors un ActionListener séparé pour chaque action.

De cette façon, votre auditeur n'a pas besoin de vérifier ce que le bouton a été pressé.

public void actionPerformed(ActionEvent event){

    System.out.println("Hello");
}

Autres conseils

L'objet button n'est pas visible dans la classe ButtonHandler; il est local au constructeur de Window. Vous pouvez en faire un domaine Window ou savoir quelle commande était destinée du ActionEvent . Voir tutoriel plus.

Addendum: par exemple

if ("OK".equals(event.getActionCommand())) { ...

Il est loin de faire que le gestionnaire de bouton conscient de bouton répond, mais cela vous empêche d'utiliser le même objet.

faire un nouveau constructeur qui prend l'objet bouton est une touche

//...
ButtonHandler handler = new ButtonHandler(button); 
//...

et

private class ButtonHandler implements ActionListener { 
    private JButton button;

    ButtonHandler( JButton button) { this.button = button; }

    public void actionPerformed(ActionEvent event){   

    if (event.getSource() == button){ // <--- "button can not be resolved"   
        System.out.println("Hello");   

    }                  
}  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top