2011-05-12 40 views
1

我有一組JPanel排列在CardLayout中。問題是,當我在一個JPanel中更改內容時,我想要將更改反映到另一個JPanel中,該另一個JPanel是同一卡片中的卡片。我在每個JPanel對象上定義了一個refresh()方法,但我無法使用用於移動卡的語法調用它們。 (這裏P是對的撲克牌容器卡)根據CardLayout中另一張卡的輸入更新一張卡的(JPanel)內容

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

我要調用刷新()方法,但我不知道該怎麼做,在CardLayout。請幫忙。

+0

哪些東西是你改變的,你添加或刪除了一些JComponents – mKorbel 2011-05-12 11:50:40

+1

你的問題不是很清楚。關於你展示的代碼片段,如果getMenuCard返回一個「卡」面板,那麼它的佈局不是CardLayout。 CradLyout是您的卡面板的父面板使用的佈局。 – jfpoilpret 2011-05-12 12:34:46

回答

3

如果我們假設每個「卡」面板實現定義refresh()方法的接口,那麼你可以做:

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轉換爲Refreshable類型,然後調用refresh()方法。 – 2011-05-12 13:38:49

+0

剛纔看到我忘了在我的例子中設置Card1面板實現刷新。只是解決這個問題,使代碼更清晰。 – jfpoilpret 2011-05-12 14:07:59

1

我有一組JPanel排列在 CardLayout中。問題是,當我在一個JPanel中更改東西時,我想要 所做的更改將反映在另一個 JPanel中,該JPanel是同一個 卡片中的卡片。我在這些JPanel 對象的每一個上定義了一個refresh()方法 對象,但我無法使用 用於移動 卡的語法來調用它們。 (這裏P是對的撲克牌容器卡 )

的一件事(CardLayout和交換JPanels)無關與其他(基於另一個類的狀態一類的狀態變化)。你需要的是,任何一個類都會進行初始更改,以便將這些信息「推送」到應該響應更改的其他類,通常是通過從第二個類調用setter方法。另一種選擇是讓第二個類通過使用偵聽器(可能是PropertyChangeListener)從第一個類「拉」信息。但是,再次,這些解決方案 - 或任何解決方案 - 都與CardLayout或交換視圖有關。

有關您當前情況的更具體建議,請考慮創建一個沒有外部依賴關係(圖像,數據庫等)的小型可編譯且可運行的應用程序,並演示您的問題,並在此處發佈。

相關問題