CardLayout的Show方法不起作用

时间:2019-12-21 20:53:22

标签: java swing layout-manager cardlayout

所以我刚开始练习SHOW STATUS LIKE 'Handler%',但似乎无法使它起作用。我查看了10多个站点,并且似乎在做与它们相同的事情,但是由于某些原因,我的版本无法正常工作。 CardLayout方法工作正常,但是调用next()却无济于事。

show()

1 个答案:

答案 0 :(得分:6)

您发布的代码有很多问题,但是它不起作用的原因仅仅是您的代码顺序错误。在将组件添加到JPanel之前,您需要设置其布局管理器。另外,您正在调用错误的add()方法。仅在将包含JPanel的{​​{1}}添加到其父容器后,再将CardLayoutJPanel添加到其父容器。

除此之外,您发布的代码无法编译,因为类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