如何在Jframe cardlayout中更改属于卡的Jframe cardlayout中的'card'并将其放置在另一个类中?

时间:2016-03-02 13:51:07

标签: java swing jframe cardlayout

我已经使用cardlayout编写了一个jframe,如下面的代码所示:

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问题,但我真的不想把所有代码放在一个类中。

1 个答案:

答案 0 :(得分:4)

你的"卡"被添加到使用CardLayout的面板中。如果您想更换卡片,那么您只需要访问布局管理器。因此,从您的面板中,您可以使用getParent()方法获取父面板,然后使用getLayout()方法获取CardLayout。

因此ActionListener中的代码可能类似于:

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

另外,你班上的一般设计是错误的。你不应该使用静态方法。阅读How to Use CardLayout上Swing教程中的部分,了解工作示例以及构建代码的更好方法。