0

我在卡片布局容器中有一些面板(不知道这是否是正确的术语)。我找不到在容器内设置这些面板的位置或大小的方法。我尝试了 setBounds 和 setLayout(null) ,但仍然无法更改。这些是我的字段和构造函数。我已经让我的框架工作了,我可以看到并使用按钮来更换卡片,但我真的无法改变卡片的其他内容。我将两个卡片面板设置为两个具有不同背景,但它们只在按钮周围制作了一小块颜色边框并将其留在屏幕中央。

我也不明白为什么这不能正确粘贴我的代码......很抱歉!

public class TestPanel extends JPanel implements ActionListener {

CardLayout cl = new CardLayout();

private JPanel panelCont = new JPanel();

private JPanel panel1 = new JPanel();

private JPanel panel2 = new JPanel();

private static JButton but1 = new JButton("Change panels");

private static JButton but2 = new JButton("Change back");

public TestPanel() {

    panelCont.setLayout(cl);
    panel1.add(but1);
    panel2.add(but2);
    panel1.setBackground(Color.black);
    panel2.setBackground(Color.blue);
    panelCont.add(panel1, "1");
    panelCont.add(panel2, "2");
    cl.show(panelCont, "1");
    but1.addActionListener(this);
    but2.addActionListener(this);
    add(panelCont);
}
}

谢谢。我提前道歉。我发现很难理解卡片布局。

4

2 回答 2

3

CardLayout 尊重添加到布局中的面板的首选大小。也就是说,大小将是添加到布局中的最大面板的大小。

我将两个卡片面板设置为两个具有不同背景,但它们只在按钮周围制作了一小块颜色边框并将其留在屏幕中央。

面板的默认布局是 FlowLayout。默认情况下,FlowLayout 在每个组件周围有 5 像素的水平/垂直间隙。因此,面板的首选尺寸是按钮尺寸加上 5 像素间隙。

面板显示正确。当您将其他组件添加到面板时,大小将根据需要更改。

于 2013-05-27T15:10:08.593 回答
2

目前还不清楚你pack()在哪里封闭Window。默认情况下,pack()导致面板必须CardLayout采用最大面板的首选大小,该大小由其内容的大小决定。此示例用于setPreferredSize()指定任意大小,但您可以按此处getPreferredSize()所示覆盖。

图片

于 2013-05-27T15:12:23.830 回答