如何从属于卡片的 Jpanel 更改 Jframe 卡片布局中的 'card',并将其放置在另一个 class 中?

How to change 'card' in Jframe cardlayout from Jpanel which belonging to card and its placed in another class?

我写了一个带有 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),它本身就是一个 'card'。我想在单击另一个 class 中的 JPanel(CasaPanel) 中的按钮后更改 'card'。如何做到这一点?我的意思是我知道如何添加按钮和侦听器,但我不知道是否可以从属于该框架的 Jpanel class 调用 JFrame 中的方法?如何从其他 classes 引用 JFrame 中的方法?我查看了 this 问题,但我真的不想将所有代码放在一个 class.

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

所以 ActionListener 中的代码可能类似于:

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

此外,您 class 的总体设计是错误的。您不应该使用静态方法。阅读 Swing 教程中有关 How to Use CardLayout 的部分,了解工作示例和更好的代码结构方式。