管理使用不同类创建的Java CardLayout JPanel

管理使用不同类创建的Java CardLayout JPanel,java,swing,Java,Swing,我需要一个简单的例子,说明如何使用CardLayout或其他方法在一个JFrame中管理使用不同类创建的多个JPanel?。这是我需要的一个示例: A小组: B小组: 文件结构示例: // Gui.java public class Gui { ... ... ... } // PanelA.java public class PanelA { ... ... ... () { JPanel pnl = new JPanel();

我需要一个简单的例子,说明如何使用CardLayout或其他方法在一个JFrame中管理使用不同类创建的多个JPanel?。这是我需要的一个示例:

A小组:

B小组:

文件结构示例:

// Gui.java
public class Gui {
    ...
    ...
    ...
}

// PanelA.java
public class PanelA {
    ...
    ...
    ... () {
        JPanel pnl = new JPanel();
        pnl.setBackground(Color.ORANGE);
        JButton btn = new JButtn("Show Panel B");
        pnl.add(btn);
    }

    public void actionPerformed(ActionEvent ae) {
        ...
    }
}

// PanelB.java
public class PanelB {
    ...
    ...
    ... () {
        JPanel pnl = new JPanel();
        pnl.setBackground(Color.GREEN);
        JButton btn = new JButtn("Show Panel A");
        pnl.add(btn);
    }

    public void actionPerformed(ActionEvent ae) {
        ...
    }
}
我发现很多例子都是这样做的,但是所有的JPanel都是在同一个类中创建的,使用JButtons作为字段,以便侦听器可以访问它们。我试图编辑这些示例,但没有成功。
对不起,我的英语不好,提前谢谢你

试试这样的方法:

Gui.java:

public class Gui {
    ...
    JPanel cards = ne JPanel(new CardLayout());
    private void initComponetns() {
        ...
        // cards to be the container with CardLayout...
        cards.add(new PanelA(this));
        cards.add(new PanelB(this));
        ...
    }
}
PanelA.java

public class PanelA extends JPanel {
    ...
    private final Gui gui;
    PanelA(Gui gui) {
        this.gui = gui;
    }
    ... () {
        setBackground(Color.ORANGE);
        JButton btn = new JButtn("Show Panel B");
        add(btn);
    }

    public void actionPerformed(ActionEvent ae) {
        ...
        gui.cards. ...
    }
}
PanelB.java

public class PanelB extends JPanel {
    ...
    private final Gui gui;
    PanelB(Gui gui) {
        this.gui = gui;
    }
    ...
    ... () {
        setBackground(Color.GREEN);
        JButton btn = new JButtn("Show Panel A");
        add(btn);
    }

    public void actionPerformed(ActionEvent ae) {
        ...
        gui.cards. ...
    }
}

编辑…首先要意识到的是,上面看到的两个面板都不需要根据给定的代码扩展面板。为什么他们要扩展JPanel?上面的代码中没有扩展。。。在我的回答中,有一个问题……如何在PanelA/PanelB的侦听器中使用Gui.java中的卡?当我单击按钮1 show panel b时,我得到了NullPointerException。什么是访问超级类卡片字段的正确方法?