java - CardLayout 的 Show 方法不做任何事情

标签 java swing layout-manager cardlayout

所以我才刚开始练习CardLayout ,但我似乎无法让它工作。我查看了 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()方法。只添加 JPanelCardLayout添加其包含的容器后添加到其父容器 JPanel s。

除此之外,您发布的代码无法编译,因为类 Main显然扩展 JFrame但是您发布的代码中缺少这一点。

这是您更正的代码。

import java.awt.CardLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame {
    private static CardLayout cards;
    private static JPanel panel;

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

        panel = new JPanel();
        cards = new CardLayout();
        panel.setLayout(cards);

        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(p1, "white");
        panel.add(p2, "black");
        panel.add(p3, "red");
        panel.add(p4, "blue");

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

        setVisible(true);
    }

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

我推荐教程Creating a GUI With JFC/Swing

关于java - CardLayout 的 Show 方法不做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439760/

相关文章:

java - 事件派发线程在哪里调用?

java - 如何在小程序中的不同行添加文本字段?

java - log4jdbc Java 8 兼容性

java - 为什么 Windows XP 会在我的第二个屏幕上最小化我的 swing 全屏窗口?

java - 具有 Synthetica Aluoxy 外观和感觉的 jxdatepicker 无法正常工作

java - 这是面板的实际尺寸吗?

java - BoxLayout 中的 Jtable

java - 我在 GridLayout 中获取按钮的 X 和 Y 索引的方法

java - 使用Java + JNA调用WinInet函数

java - 编译 Android App 时出现错误