更改卡片布局中面板的背景和大小

时间:2013-05-27 13:45:10

标签: java swing awt layout-manager cardlayout

我在卡片布局容器中有一些面板(不知道这是否是正确的术语)。我找不到一种方法来设置容器内这些面板的位置或大小。我尝试了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);
}
}

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

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

答案 1 :(得分:2)

不清楚pack()封闭Window的位置。默认情况下,pack()会导致CardLayout的面板采用最大面板首选大小的大小,该大小取决于其内容的大小。此example使用setPreferredSize()指定任意大小,但您可以覆盖getPreferredSize(),如图所示here

image