2013-01-02 2 views
2

모든 클래스에는 Math.java라는 메인 구성 요소가 있습니다. 별도의 클래스 (Calc)에서는 모든 구성 요소를 가져 와서 Calc의 생성자에서 Math의 로컬 구성 요소에 저장합니다. 유일한 방법은 구성 요소 중 하나의 부모 구성 요소를 가져 오려고 할 때 항상 null을 반환하는 것입니다. Math의 JLabel에 직접 액세스하면 작동합니다.스윙 : 다른 클래스에서 구성 요소의 부모 가져 오기

cards []는 JLabel의 배열입니다. panel2a 및 layer는 JPanels입니다. 두 배열이 동일한 개체에 대한 사실 홀드 참조로 할 경우

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에서 로컬 구성 요소에 저장합니다. Calc. " 이것을 보여주십시오 –

+0

@ rasen58 우리에게 몇 가지 코드를 보여주십시오. 대부분 해당 구성 요소의 다른 인스턴스에 액세스하고 있습니다. –

답변

0

는 다음 개체 참조가 저장되는 위치에 따라 다르게 작동 해당 개체의 방법 중 하나에 대해 (내가 아는) 방법이 없습니다. 즉, 동일한 객체 인 경우 math.cards[i] == cards[i]이며 math.cards[i].anyMethod() 또는 cards[i].anyMethod()에 전화를 거는 경우에 따라 다른 결과를 얻을 수있는 방법은 전혀 없습니다.

다른 결과가 표시되므로 배열에 동일한 개체가 없어야합니다. 아마도 로컬 cards 배열의 내용을 컨테이너에 추가하지 않았을 것입니다. 또한 하나의 컨테이너에 구성 요소를 추가하면 해당 구성 요소가 이미있는 컨테이너에서 자동으로 제거됩니다.

관련 문제