我已经使用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问题,但我真的不想把所有代码放在一个类中。
答案 0 :(得分:4)
你的"卡"被添加到使用CardLayout
的面板中。如果您想更换卡片,那么您只需要访问布局管理器。因此,从您的面板中,您可以使用getParent()方法获取父面板,然后使用getLayout()方法获取CardLayout。
因此ActionListener中的代码可能类似于:
JPanel parent = (JPanel)getParent();
CardLayout layout = parent.getLayout();
layout.show(panel, "...");
另外,你班上的一般设计是错误的。你不应该使用静态方法。阅读How to Use CardLayout上Swing教程中的部分,了解工作示例以及构建代码的更好方法。