2010-05-20 160 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