我在卡片布局容器中有一些面板(不知道这是否是正确的术语)。我找不到一种方法来设置容器内这些面板的位置或大小。我尝试了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);
}
}
感谢。我提前道歉。我发现很难理解卡片布局。
答案 0 :(得分:3)
CardLayout尊重添加到布局的面板的首选大小。也就是说,大小将是添加到布局中的最大面板的大小。
我将两个卡片面板设置为两个具有不同背景的卡片,但它们只在按钮周围制作一个小的边框,并将其留在屏幕的中央。
面板的默认布局是FlowLayout。默认情况下,FlowLayout在每个组件周围都有一个5像素的水平/垂直间隙。因此,面板的首选尺寸是按钮的大小加上5像素的间隙。
面板正确显示。向面板添加其他组件时,大小将根据需要更改。
答案 1 :(得分:2)
不清楚pack()
封闭Window
的位置。默认情况下,pack()
会导致CardLayout
的面板采用最大面板首选大小的大小,该大小取决于其内容的大小。此example使用setPreferredSize()
指定任意大小,但您可以覆盖getPreferredSize()
,如图所示here。