2013-01-02 29 views
2

我有一個主類,其中我所有的gui組件都被稱爲Math.java。在一個單獨的類(Calc)中,我得到了所有的組件,並將它們保存在Calc的構造函數的Math中的本地組件中。唯一不起作用的是當我嘗試獲取其中一個組件的父組件時,它總是返回null。當我直接訪問Math中的JLabels時,它可以工作。Swing:從另一個類獲取組件的父項

cards []是一個JLabels數組。 panel2a和圖層是JPanel。

public void clear() 
{ 
    for(int i =0;i <cards.length; i++) 
    { 
//this works, calling the components directly 
     if(math.cards[i].getParent().equals(math.panel2a)) 
     { 
      math.panel2a.remove(cards[i]); 

      layer.add(cards[i]); 

      layer.repaint(); 
     } 
//this doesn't work, using the local components 
     if(cards[i].getParent().equals(panel2a)) 
     { 
      panel2a.remove(cards[i]); 

      layer.add(cards[i]); 

      layer.repaint(); 
     } 
    } 
} 
+2

「我得到所有組件並將它們保存在Math的構造函數中的本地組件中計算器「。顯示此 –

+0

@ rasen58向我們展示一些代碼。很可能,您正在訪問這些組件的不同實例。 –

回答

0

如果兩個數組實際上保持引用同一個對象做,那麼有沒有方法(我知道的)任何的那個對象的方法來表現不同,這取決於對象引用存儲在哪裏。換句話說,如果它是同一個對象,那麼math.cards[i] == cards[i],並且根據是否調用math.cards[i].anyMethod()cards[i].anyMethod(),您絕對不會得到不同的結果。

由於您看到不同的結果,所以數組不能有相同的對象。您可能尚未將本地cards陣列的內容添加到任何容器。另外請記住,將組件添加到一個容器時,該組件會自動從它可能已經存在的任何容器中移除。