我的问题是如何在布局上指定部件的尺寸?
我需要以某种方式设置“部件”的大小而不是使用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添加到上一级。
答案 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));