Java CardLayout中有2个以上可见的JPanel

Java CardLayout中有2个以上可见的JPanel,java,swing,jpanel,layout-manager,cardlayout,Java,Swing,Jpanel,Layout Manager,Cardlayout,在将两个以上的JPanel对象放置在同时可见的CardLayout中时,我遇到了问题。虽然我可以放置多个面板,但它们不会同时出现,而且我无法根据需要调整它们的大小。为了更清楚地了解我想要什么,我添加了一个测试图像 在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(JPanel)。下面是一个简单的例子: import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color;

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


在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(
JPanel
)。下面是一个简单的例子:

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;
    }

}

在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(
JPanel
)。下面是一个简单的例子:

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;
    }

}

创建一个jpanel并将其布局设置为类似网格的布局,然后向其中添加两个子jpanel,然后将主面板添加到卡布局我可以手动设置子jpanel的大小吗?可以。可以使用适当的布局控制子面板的大小。如果选择网格布局,则两个子面板的大小将相同。可以。但是我可以将1个面板的大小设置为1/4,将其余面板的大小设置为另一个吗?@可以,但您是说边栏和正文内容可以更改为面板1和面板2吗?边栏和标题不应该位于卡片布局的内部。我告诉您的是,如果您希望有2个面板而不是单个正文内容可更改的面板,那么您应该设置适当的布局bodycontentchangable panel并向其添加2个子面板创建一个jpanel并将其布局设置为类似网格的格式,向其添加2个子jpanel,然后将主面板添加到卡布局我可以手动设置子jpanel的大小吗?可以。您可以使用适当的布局来控制子面板的大小。如果选择网格布局,则两个子面板的大小都可以都一样。是的,没关系。但是我可以将1个面板的大小设置为1/4,将其余面板的大小设置为另一个吗?@可以,但您是说边栏和正文内容可以更改为面板1和面板2吗?边栏和标题不应该位于卡片布局的内部。我告诉您的是,如果您希望有2个面板而不是单个正文内容可更改的面板,那么您应该设置适当的布局bodycontentchangable面板,并向iThanks添加2个子面板。我有很多想法。现在更清楚了+1&接受感谢。我有很多想法。现在更清楚了+1&接受