2010-03-09 6 views
1

J'ai ce code:objet ne peut pas être résolu

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 ne va pas. Connaissances requises! :)

+1

En aparté, il peut être source de confusion pour nommer une classe après l'un de ses superclasses. http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html – trashgod

Répondre

2

Évitez d'avoir votre action ActionListener dépend de ce bouton a été pressé. Si vous avez différentes actions pour différents boutons, définissez un ActionListener séparé pour chaque action. De cette façon, votre auditeur n'a pas besoin de vérifier quel bouton a été enfoncé.

public void actionPerformed(ActionEvent event){ 

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

L'objet button n'est pas visible dans la classe ButtonHandler; c'est local au constructeur Window. Vous pouvez en faire un champ dans Window ou trouver quelle commande a été prévue à partir du ActionEvent. Voir le tutorial pour plus.

Addendum: par exemple

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

Pensez que vous vouliez dire que ce n'était pas visible à la classe ButtonHandler – objects

+0

Merci! Réponse modifiée. – trashgod

1

Il n'y a pas de prise de conscience du bouton sur lequel le bouton répond, mais cela vous empêchera d'utiliser le même objet.

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

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

puis

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"); 

    }     
} 
Questions connexes