CardLayout 中超过 2 个可见的 JPanel

More than 2 Visible JPanels in a CardLayout

我在 CardLayout 中放置两个以上的 JPanel 对象时遇到问题,这些对象同时可见 。虽然我可以放置多个面板,但它们不会同时出现并且我无法根据需要调整它们的大小。为了更清楚地了解我想要什么,我添加了一张测试图像。

在这种情况下,您可以将面板与 BorderLayout as container for constants and cards, and then cards(JPanel) with CardLayout 一起使用。这是一个简单的例子:

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

    public static void main(String... s) {
        new TestFrame();
    }

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }


    private void init() {
        setLayout(new BorderLayout());

        JLabel head = new JLabel("Header");
        head.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        JLabel side = new JLabel("SideBar");
        side.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        JPanel changable = getPanel();
        changable.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        add(head,BorderLayout.NORTH);
        add(side,BorderLayout.WEST);
        add(changable,BorderLayout.CENTER);
    }


    private JPanel getPanel() {
        final CardLayout cards = new CardLayout(5,5);
        final JPanel p = new JPanel(cards);
        p.add(new JLabel("1"), "1");
        p.add(new JLabel("2"), "2");

        p.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                cards.next(p);
            }
        });

        return p;
    }

}