2016-03-02 22 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

相关问题