2010-05-20 4 views
1

je une classe publique qui a la méthode suivante et variable par exemple:JPanel.addComponentListener ne fonctionne pas lorsque l'auditeur est une variable classe

public void setImagePanel(JPanel value) { 
    imagePanel = value; 

    if (imagePanel != null) { 

    //method 1 : works 
    imagePanel.addComponentListener(new ComponentAdapter() { 

     public void componentResized(ComponentEvent evt) { 
      System.out.println("Here 1"); 
     } 

    }); 

    //method 2 : does not work 
    panelResizeListener = new ResizeListener(); 
    imagePanel.addComponentListener(panelResizeListener); 

    //method 3 : works 
    //ResizeListener listener = new ResizeListener(); 
    //imagePanel.addComponentListener(listener); 

    //method 4 : works 
    //imagePanel.addComponentListener(new ResizeListener()); 

    //method 5 : does not work -- THIS IS THE DESIRED CODE I WANT TO USE 
    imagePanel.addComponentListener(panelResizeListener); 
    } 
} 

public class ResizeListener extends ComponentAdapter { 

    @Override 
    public void componentResized(ComponentEvent evt) { 
    System.out.println("RESIZE 3"); 
    } 

} 

private ResizeListener panelResizeListener = new ResizeListener(); 
private static JPanel imagePanel; 

Chacune des méthodes ci-dessus correspondent au code du juste en dessous jusqu'à ce que la suivant // commentaire de la méthode. Ce que je ne comprends pas, c'est pourquoi je ne peux pas utiliser la variable d'instance de classe et l'ajouter au JPanel en tant qu'écouteur de composant. Ce qui se passe dans les cas ci-dessus où je dis que la méthode ne fonctionne pas, c'est que je ne reçois pas les messages du journal "RESIZE 3". Dans tous les cas où je liste que cela fonctionne, alors je reçois les messages "RESIZE 3".

La classe externe est publique sans autre modification, sauf qu'elle implémente une interface que j'ai créée (qui n'a pas de méthodes ou de variables en commun avec les méthodes et variables listées ci-dessus).

Si quelqu'un peut m'aider je l'apprécierais grandement. Ce problème n'a aucun sens pour moi, le code devrait être identique.

+1

Vous pouvez utiliser une variable de classe. Il y a quelque chose d'autre qui ne va pas avec votre code. Postez votre SSCCE: http://sscce.org – camickr

+0

Désolé, je ne suis pas, j'utilise une variable de classe et c'est dans le code que j'ai posté ci-dessus. Que voulez-vous dire d'autre est faux avec mon code? J'ai également essayé ce qui suit ResizeListener listener = new ResizeListener(); panelResizeListener = écouteur; // AVOIR RUPTURE DE CETTE LIGNE, je ne comprends pas pourquoi imagePanel.addComponentListener (écouteur); Aussi une question secondaire, je ne sais pas comment formater mes messages en code, j'ai essayé de regarder les modifications des autres, et il semble qu'ils ajoutent juste des espaces en face, mais ça ne marche pas pour moi , THX. – Coder

+0

Vous n'avez pas posté de SSCCE (je vous ai donné un lien qui explique ce que c'est), je ne peux pas vous dire ce qui ne va pas avec votre code. – camickr

Répondre

2

Man camickr, vous aviez raison. C'était un homme étrange à résoudre. Il y avait quelque chose d'autre avec mon code. L'ordre des appels de méthodes dans ma classe m'a amené à ajouter l'écouteur, puis une autre méthode finirait par supprimer l'écouteur référencé par cette variable, donc bien sûr je n'aurais jamais d'événements. Merci beaucoup pour tout l'aide ppl.

1

Je pense que votre problème est que vous déclarez panelResizeListener après l'avoir utilisé. Cela tue normalement n'importe quoi.

+0

Merci pour la suggestion, j'ai compris quel était le problème. – Coder

Questions connexes