>我用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) 之一更改卡(显示卡),它本身就是一张"卡"。我想在单击另一个类中的 JPanel(CasaPanel) 中的按钮后更改"卡片"。怎么做?我的意思是我知道如何添加按钮和侦听器,但我不知道是否可以从属于该帧的 Jpanel 类调用 JFrame 中的方法?如何从其他类引用 JFrame 中的方法?我看了这个问题,但我真的不想把所有代码放在一个类中。
您的"卡"将添加到使用CardLayout
的面板中。如果您想更换卡片,那么您只需要访问布局管理器。因此,从您的面板中,您可以使用 getParent() 方法来获取父面板,然后使用 getLayout() 方法来获取 CardLayout。
因此,ActionListener 中的代码可能如下所示:
JPanel parent = (JPanel)getParent();
CardLayout layout = parent.getLayout();
layout.show(panel, "...");
另外,你的类的一般设计是错误的。不应使用静态方法。阅读 Swing 教程中有关如何使用 CardLayout 的部分,了解工作示例和构建代码的更好方法。