[英]Change Background and size of panels in card layout
我在卡布局容器中有一些面板(不知道这是否是正确的术语)。 我找不到设置容器内这些面板的位置或大小的方法。 我尝试了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);
}
}
谢谢。 我事先表示歉意。 我发现很难理解卡的布局。
CardLayout遵循添加到布局中的面板的首选大小。 也就是说,大小将是添加到布局中的最大面板的大小。
我将两个卡面板设置为两个具有不同的背景,但是它们仅使按钮周围带有一小块颜色,并将其放置在屏幕中央。
面板的默认布局是FlowLayout。 默认情况下,FlowLayout在每个组件周围有5像素的水平/垂直间隙。 因此,面板的首选大小是按钮的大小加上5个像素的间距。
面板显示正确。 当您将其他组件添加到面板时,大小将根据需要更改。
目前尚不清楚您在哪里pack()
封闭的Window
。 默认情况下, pack()
会使具有CardLayout
的面板采用最大面板的首选大小,该大小由其内容的大小决定。 这个例子使用setPreferredSize()
指定任意大小,但是你可以重写getPreferredSize()
如图所示这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.