Java 卡片布局';我们什么也不做

Java 卡片布局';我们什么也不做,java,swing,layout-manager,cardlayout,Java,Swing,Layout Manager,Cardlayout,所以我刚开始练习卡片布局,但我似乎无法让它发挥作用。我查看了10多个网站,我似乎在做与它们相同的事情,但由于某种原因,我的版本不起作用。next()方法工作正常,但是调用show()没有任何作用 private static CardLayout cards; private static JPanel panel; private Main() { super("Card Layout"); setBounds(0, 0, 500, 500); setDefaultC

所以我刚开始练习卡片布局,但我似乎无法让它发挥作用。我查看了10多个网站,我似乎在做与它们相同的事情,但由于某种原因,我的版本不起作用。
next()
方法工作正常,但是调用
show()
没有任何作用

private static CardLayout cards;
private static JPanel panel;

private Main() {
    super("Card Layout");
    setBounds(0, 0, 500, 500);
    setDefaultCloseOperation(3);

    panel = new JPanel();

    add(panel);

    cards = new CardLayout();

    JPanel p1 = new JPanel();
    p1.setBackground(Color.WHITE);

    JPanel p2 = new JPanel();
    p2.setBackground(Color.BLACK);

    JPanel p3 = new JPanel();
    p3.setBackground(Color.RED);

    JPanel p4 = new JPanel();
    p4.setBackground(Color.BLUE);

    panel.add("white", p1);
    panel.add("black", p2);
    panel.add("red", p3);
    panel.add("blue", p4);

    panel.setLayout(cards);

    // cards.next(panel); This works fine for me.
    cards.show(panel, "red");

    setVisible(true);
}

public static void main(String[] args) {
    new Main();
}

您发布的代码有很多问题,但它不起作用的原因只是代码顺序错误。在将组件添加到
JPanel
之前,需要设置其布局管理器。此外,您正在调用错误的
add()
方法。只有在添加了包含的
JPanel
s之后,才能使用
CardLayout
JPanel
添加到其父容器中

除此之外,您发布的代码不会编译,因为类
Main
显然扩展了
JFrame
,但您发布的代码中缺少了该类

这是您的代码更正

导入java.awt.CardLayout;
导入java.awt.Color;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类主框架{
专用静态卡片布局卡;
专用静态JPanel面板;
专用干管(){
超级(“卡片布局”);
立根(0,0,500,500);
设置默认关闭操作(3);
panel=新的JPanel();
卡片=新卡片布局();
面板布局(卡片);
JPanel p1=新的JPanel();
p1.立根背景(颜色:白色);
JPanel p2=新的JPanel();
p2.立根背景(颜色:黑色);
JPanel p3=新的JPanel();
p3.挫折背景(颜色:红色);
JPanel p4=新的JPanel();
p4.挫折背景(颜色:蓝色);
面板。添加(p1,“白色”);
面板。添加(p2,“黑色”);
面板。添加(p3,“红色”);
面板。添加(p4,“蓝色”);
//卡片。下一个(面板);这对我来说很好。
卡片显示(面板“红色”);
添加(面板);
setVisible(真);
}
公共静态void main(字符串[]args){
新的Main();
}
}

我推荐教程

谢谢,但是如果我在添加内容之前没有将布局设置为卡片布局,那么下一个方法是如何工作的?另外,面板的add方法的两个版本都适用于我。其中一个比另一个有优势吗?最后一个问题,JFrame可以变成卡片布局吗?我使用了教程中的示例代码,我在回答中给出了链接。