如何从不同类的面板返回主类面板?

时间:2016-12-08 10:53:53

标签: java swing

我有两个班,一个是主班,另一班是专业班。主要课程有介绍性小组,进一步显示专业小组。专业类的第二个面板有“Home”按钮,需要显示主类面板。请告诉我如何让“主页”按钮工作?

class proMain extends JPanel {
    JPanel pan2 = new JPanel();
    JButton b1, b2, b3;
    CardLayout lay = new CardLayout();

    public void pshow() {

        // First Panel
        pan.setBackground(Color.red);
        b1 = new JButton("Next");
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (ae.getActionCommand().equals("Next")) {
                    pan2.setVisible(true);
                    pan.setVisible(false);
                }
            }
        });

        pan.add(b1);

        // Second Panel
        b2 = new JButton("Previous");
        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (ae.getActionCommand().equals("Previous")) {
                    pan.setVisible(true);
                    pan2.setVisible(false);
                }
            }
        });
        b3 = new JButton("Home");
        b3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (ae.getActionCommand() == "Home") {
                    //
                }
            }
        });
        pan2.setBackground(Color.cyan);
        pan2.add(b2);
        pan2.add(b3);
        pan.setVisible(true);
        pan2.setVisible(false);
        add(pan);
        add(pan2);
    }
}

上面的类是proMain类,主要类是:

public class proDis {
    public static void main(String[] args) {
        JFrame fr = new JFrame("CrdLay");
        JPanel pan3 = new JPanel();
        JButton b = new JButton("Next");
        CardLayout cl = new CardLayout();
        fr.setLayout(cl);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (ae.getActionCommand().equals("Next")) {
                    pan3.setVisible(false);
                    proMain pm = new proMain();
                    pm.pshow();
                    pm.setLayout(cl);
                    fr.add(pm);
                    pm.setVisible(true);
                }
            }
        });
        pan3.setBackground(Color.gray);
        pan3.add(b);
        fr.setSize(100, 300);
        fr.setVisible(true);
        fr.add(pan3);
    }
}

1 个答案:

答案 0 :(得分:1)

您正在尝试使用CardLayout,这是正确的方法。但是,您的实现不正确。

您的代码存在的问题是您没有使用CardLayout的方法来控制显示哪个面板。 CardLayout支持方法。例如next(...)previous(...)按顺序移动所有面板和方法show(...)以显示特定面板。

因此,首先要做的是在将每个面板添加到布局时为面板命名。然后更改代码以使用上述方法来控制显示哪个面板。没有必要使用任何面板的可见性,这是​​CardLayout的作用。

阅读How to Use CardLayout上Swing教程中的部分,了解更多信息和工作示例。