2010-05-20 162 views
1

我有它具有下列方法和实例变量一个公共类:JPanel.addComponentListener不起作用

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; 

每个的上述方法对应的立即下面的代码,直到接下来//方法评论。我不明白的是为什么我不能使用类的实例变量,并添加到JPanel作为组件监听。

以上,其中我说该方法不起作用的情况下会发生什么事是,我没有得到"RESIZE 3"日志消息。在所有我列出它可以工作的情况下,我会收到"RESIZE 3"消息。

外类是公众所不同的是它实现我创建(其具有在共同的任何方法或变量与上面列出的方法和变量)的接口没有其他修饰。

如果有人能帮助我,我将不胜感激。这个问题对我来说没有意义,代码应该是相同的。

+1

你可以使用一个类变量。你的代码还有其他问题。发表您的SSCCE:http://sscce.org – camickr 2010-05-21 00:25:24

+0

对不起,我不明白,我使用的是类变量,它在我上面贴的代码。我的代码是什么意思? 我还尝试了以下 ResizeListener听者=新ResizeListener(); panelResizeListener =监听; // HAVING此行打破它,我不明白为什么 imagePanel.addComponentListener(监听); 另外一个方面的问题,我不知道如何格式化我的帖子为代码,我曾试图寻找其他人的编辑,而且看起来他们只是在前面加空格,但它并没有为我工作, 谢谢。 – Coder 2010-05-21 00:50:06

+0

你没有张贴SSCCE(我给你一个链接,说明它是什么),我不能什么你的代码错误告诉你。 – camickr 2010-05-21 02:19:40

回答

2

人camickr,你是对的。这是一个很难解决的问题。我的代码还有其他问题。方法的顺序调用到我的类中导致我添加了侦听器,然后另一个方法将最终删除该变量引用的侦听器,所以当然我永远不会收到事件。非常感谢所有帮助的人。

1

我觉得你的问题是,你正在你使用后声明panelResizeListener。这通常会杀死任何东西。

+0

感谢您的建议,我找出问题所在。 – Coder 2010-05-21 10:04:16