2013-05-27 112 views
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); 
} 
} 

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

+0

要使用代码格式化,选择样品并单击传递消息张贴/编辑形式上面的'{}'按钮。 –

+0

*“我试过setBounds和setLayout(null),我仍然无法得到任何改变。”*不要使用这些方法。 Java GUI可能需要在多种平台上工作,使用不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的准确放置。对于可靠的GUI,改为使用布局管理器或它们的组合,以及**布局填充**和**边框**作为空白区域来组织组件。为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/),面板的大小取决于它们添加到的任何容器的布局。 –

回答

3

CardLayout尊重添加到布局的面板的首选大小。这就是尺寸将是添加到布局的最大面板的尺寸。

我设置两个卡面板有两个不同的背景,但它们只是在按钮周围形成一个小小的边框,并将其留在屏幕的中心。

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

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

2

目前尚不清楚你在哪里pack()附上Window。默认情况下,pack()会导致具有CardLayout的面板采用最大面板的首选大小,该大小由其内容的大小决定。此example使用setPreferredSize()来指定任意大小,但是您可以覆盖getPreferredSize(),如here所示。

image