java Swing中的布局指定大小

时间:2012-02-08 13:14:36

标签: java swing layout layout-manager

我的问题是如何在布局上指定部件的尺寸?
我需要以某种方式设置“部件”的大小而不是使用preferedSize,可能在布局管理器中,无所谓 - 只有我需要的是稳定的尺寸。

我想为游戏创建布局。我已经创建了一个,但我正在处理组件大小的问题。所以我认为对我的布局做出更好的概念会更好。
我们来看看我的选秀。


+-----------+ 
| UPPER     |
+-----+-----+
|  A  |     |
+-----+  C  |
|  B  |     |
+-----+-----+
| Footer    |
+-----------+

A+B+C make together Center.

主要部分包括这个树部分:
上部 - 将有菜单。
中心 - 由3部分A,B,C组成 页脚 - 将有状态栏


我的想法是能够设置每个组件的大小。 所有布局都取决于C部分,它的尺寸可以是450x450像素或600x600像素 对于A部分和B部分,我只需要指定宽度,因为只有一些文字信息 - 它应该是大约300像素。
我尝试使用GridBagLayout作为中心部分,但是setSize for C不能很好地工作 我在Containers(java.awt.Container)中制作零件 - 在其中我添加每个零件的内容,然后将Container添加到上一级。

5 个答案:

答案 0 :(得分:2)

最简单的方法:使用BorderLayout作为contentPane(已经是)    - 上面板朝北    - 页脚面板转到南方    - 面板A和B使用GridLayout(2,1)进入面板ab    - 面板ab和C使用GridLayout(1,2)进入面板abc    - 面板abc进入中心 和A,B,C的setPrefferedSize()

答案 1 :(得分:2)

通常,GridBagLayout会忽略您为setSize控件设置的值,而是会向控件询问其首选大小(通过调用getPreferredSize)并将其用于计算整体布局。不建议您自己设置首选大小,因为大多数控件都会在触发布局时重新计算这些值,因此您很难让它们“粘住”。

如果您确实要确保UI元素C具有特定大小,请将其实现为从适当的基础派生的自定义类(例如,JPanel)和覆盖 {{1} }方法使其返回您想要/需要的部分UI的大小。

编辑:以下是一个包​​含另一个UI元素的包装器的示例,可以设置为固定大小(使用已被覆盖的getPreferredSize方法),这应该是受布局经理尊重:

setSize

答案 2 :(得分:1)

我遇到了类似的问题,底部的状态工具栏包含许多其他组件。我的问题是它会变得更高。所以我所做的是覆盖最大尺寸,将最大高度设置为最小高度。

JPanel status = new JPanel( new SpringLayout() ) {
  @Override
  public Dimension getMaximumSize() {
    Dimension max = super.getMaximumSize();
    Dimension min = getMinimumSize();
    return new Dimension( max.width, min.height );
  }
};

答案 3 :(得分:0)

这个答案太少而且太晚了,

(也许在提出这个问题时这种方法不存在)

就像getPreferredSize一样,还有一个setPreferredSize方法可以获取Dimension个对象。

默认情况下,您的布局会忽略您的组件大小(您可能使用setSize设置),而是使用首选大小。

使用setPreferredSize,您将能够覆盖组件的默认首选大小

答案 4 :(得分:-2)

我希望我的答案能以某种方式帮助你。根据设置JPanel或JFrame大小的经验,我总是使用setPreferredSize(new Dimension(WIDTH,HEIGHT));