2011-05-12 2 views
1

CardLayout에 배열 된 JPanel 집합이 있습니다. 문제는 한 JPanel에서 일을 변경하면 같은 데크에있는 카드 인 다른 JPanel에 변경 사항이 반영되기를 바랍니다. 이 JPanel 객체 각각에 refresh() 메서드가 정의되어 있지만 카드 이동에 사용되는 구문을 사용하여 호출 할 수는 없습니다. 내가 새로 고침() 메서드를 호출하고 싶지만 내가 CardLayout에서 그 방법을 모르는CardLayout에있는 다른 카드의 입력을 기반으로 한 카드의 (JPanel) 내용을 업데이트합니다.

CardLayout cardLayout=(CardLayout)(p.getMenuCard().getLayout()); 
cardLayout.show(p.getMenuCard(),"Card name"); 

(여기서 p는 카드의 갑판의 컨테이너 카드입니다). 도와주세요. 우리는 당신의 "카드"각 패널은 refresh() 방법을 정의하는 인터페이스를 구현한다고 가정하면

+0

어떤 것이 변경 되었습니까? 일부 JComponents를 추가 또는 제거 하시겠습니까? – mKorbel

+1

quesiton이 명확하지 않습니다. 표시하는 코드 스 니펫에 대해 getMenuCard가 "카드"패널을 반환하면 해당 레이아웃은 CardLayout이 아닙니다. CradLyout은 카드 패널의 상위 패널에서 사용하는 레이아웃입니다. – jfpoilpret

답변

3

, 당신은 할 수 :이 문제에 대한 이해에 따라됩니다

interface Refreshable { 
    void refresh(); 
} 

class Card1 extends JPanel implements Refreshable {...} 
... 

// Changing the selected card panel 
cardlayout.show(deckpanel, "card name"); 
for (component card: deckpanel.getComponents()) { 
    ((Refreshable) card).refresh(); 
} 

. 문제 해결에 도움이되지 않으면 질문을 편집하여 추가로 명확히하십시오.

+0

예, 작동했습니다. 고맙습니다. 그러나 나는 당신이 전에 이것을 사용했던 개념을 보지 못했습니다. JPanel을 새로 고침 가능한 형식으로 캐스팅 한 다음 그 위에 refresh() 메서드를 호출합니다. –

+0

내 예제에서 Card1 패널 구현을 새로 고칠 수 있도록 설정하는 것을 잊어 버렸습니다. 코드를 명확하게하기 위해 그것을 고쳤습니다. – jfpoilpret

1

나는 CardLayout에 배열 된 JPanels를 가지고 있습니다. 문제는 하나의 JPanel에서 을 변경하면 데크에있는 카드 인 JPanel에 변경 사항을 반영하고 싶습니다. 나는이 각각의 JPanel 개체에 refresh() 메서드 을 정의했지만 카드를 이동하는 데 사용되는 구문을 사용하여 호출 할 수는 없습니다.

한 가지 (CardLayout 및 교환 JPanel의) (여기서 p는 카드의 갑판의 컨테이너 카드 입니다) 다른 (다른 클래스의 상태에 따라 하나 개의 클래스 변경 상태)과는 아무 상관이 없습니다. 당신이 필요로하는 것은 두 번째 클래스의 setter 메소드를 호출하여 변경 사항에 응답해야하는 다른 클래스에이 정보를 "밀어 넣기"위한 초기 변경을 수행하는 클래스에 대한 것입니다. 또 다른 옵션은 청취자 (아마도 PropertyChangeListener)를 사용하여 두 번째 클래스가 첫 번째 클래스의 정보를 "가져 오게"하는 것입니다. 그러나 다시 말하지만, 이러한 솔루션 또는 어떤 솔루션이든지 CardLayout 또는 스와핑 뷰와 아무런 관련이 없습니다.

현재 상황에 대한 더 구체적인 조언을 원할 경우 외부 종속성 (이미지, 데이터베이스 등)이없고 문제를 나타내는 SSCCE 인 작은 컴파일 및 실행 가능한 앱을 만들어 여기에 게시하십시오.