2016-03-02 57 views
0

我已經寫有cardlayout一個JFrame,如下面的代碼:如何從屬於卡的Jpanel中將Jframe cardlayout中的'card'更改爲另一個類中的卡?

public class Gui extends JFrame { 


private static CardLayout cardlayout = new CardLayout(); 
    private static JPanel cards = new JPanel(cardlayout); 

public Gui() { 

cards.setLayout(cardlayout); 
CasaPanel card =new CasaPanel(); 
cards.add(card,"casa"); 
InCash card_1 = new InCash(); 
cards.add(card_1,"in"); 
OutCash card_2 = new OutCash(); 
cards.add(card_2,"out"); 
setLayout(new BorderLayout()); 
add(cards, BorderLayout.CENTER); 

} 

public static void showCard(String name) 
{ 
    cardlayout.show(cards, name); 
} 

我試圖調用方法從JPanel的(CasaPanel)的一個變卡(ShowCard),這本身就是一個「卡」。在單擊另一個課程中的JPanel(CasaPanel)中的按鈕後,我想要更改「卡片」。如何做到這一點?我的意思是我知道如何添加按鈕和偵聽器,但我不知道是否可以從屬於該框架的Jpanel類調用JFrame中的方法?如何從其他類引用JFrame中的方法?我看着this的問題,但我真的不想把所有的代碼放在一個類中。

回答

4

將您的「卡」添加到使用CardLayout的面板中。如果你想換卡,那麼你只需要訪問佈局管理器。所以從你的面板你可以使用getParent()方法來獲得父面板,然後使用getLayout()方法來獲取CardLayout。

所以在ActionListener的代碼可能是這樣的:

JPanel parent = (JPanel)getParent(); 
CardLayout layout = parent.getLayout(); 
layout.show(panel, "..."); 

此外,然後在你的類一般設計是錯誤的。你不應該使用靜態方法。閱讀How to Use CardLayout的Swing教程中的部分,瞭解工作示例以及構建代碼的更好方法。

+0

非常感謝工作解決方案,並提示如何更好地構建此課程。 – Majlena

相關問題