Java - 布局管理器选择

时间:2009-07-06 15:33:13

标签: java layout

我是否可以在JPanel中使用简单的布局管理器来创建类似于条形图的内容? FlowLayout几乎满足了这一需求。添加的组件方向需要从左到右(FlowLayout的默认值),但是它们需要在面板底部“休息”,顶部有多余的空间(FlowLayout中不可用)。此外,组件的高度和宽度都相同。

感谢。

5 个答案:

答案 0 :(得分:3)

BoxLayout将执行此posting

中演示的技巧

答案 1 :(得分:1)

如果要打算使用条形图,可能需要考虑不使用Component。只需要覆盖一个JComponent(IIRC)paintComponent。以适合条形图的方式进行计算比使用不合适的布局管理器抽象更容易。

FWIW,我默认为GridBagLayout,即使更简单的布局管理器会这样做,在此基础上代码可以更加一致。

答案 2 :(得分:1)

您可以在GridBagLayout中完全按照自己的意愿行事。是的,我知道每个人都讨厌GBL;是的,我知道我会被投票。但是理解它真的很难 ,你几乎可以将它用于任何布局目标。

让组件“坚持”到底部的技巧是正确使用GridBagConstraints对象的填充属性(即{ {1}}和SOUTH

答案 3 :(得分:0)

BoxLayout可能适合您。它允许您从左到右或从上到下布置组件,使用紧密耦合的Box类来强制间距约束。

答案 4 :(得分:0)

我实际上更喜欢FormLayout,因为它非常灵活,但你必须编写很多代码。并且在开始时它的百分比和像素参数有点令人困惑。

但是你可以告诉一个控件它是另一个控件剩下的5个像素(这就是主要部分......它布局控件相对于邻居),然后它需要100%的持久空间可用,包括边框5像素的空间(你需要使用-5)。

我认为它看起来有点类似于

FormData data = new FormData();
data.left = new FormAttachement(neighborControl, 5);
data.right = new FormAttachement(100, -5);
...
button.setLayoutData(data);

此示例适用于JFace,但也有Swing实现。 我将在今天晚些时候查看我的旧代码以检查我写的代码是否正确:)

这是一个额外的link