2010-12-21 72 views
2

什么是标准的Java Swing最简单的方法以这样的方式排列三个部分组成:Swing:对齐[动态] [静态] [动态]组件宽度的最简单方法?

  • 动态宽度Component1Component3调整为等于

  • Component2(介于之间)有常数宽度?

想象一下,我们有一些可调整大小的JPanel(例如JFrame内部)。

小的宽度应该是这样的:

[----------------whole JPanel----------------] 
[--Component1--] [Component2] [--Component3--] 

大宽度应该是这样的:

[------------------------whole JPanel------------------------] 
[------Component1------] [Component2] [------Component3------] 

注:我只是 “造模,和差错” 与GroupLayout时间过长。

回答

1

一个选项是使用GridBagLayout。一个快速和肮脏的片段,让你开始:

GridBagConstraints gbc; 
final int A_CENTER = GridBagConstraints.CENTER; // anchor: center 
final int F_NONE = GridBagConstraints.NONE; // fill: none 
final int F_DX = GridBagConstraints.HORIZONTAL; // fill: dx only 
final Insets IN_0 = new Insets(0, 0, 0, 0); // empty insets 

setLayout(new GridBagLayout()); 
gbc = new GridBagConstraints(0, 0, 1, 1, 50.0, 0.0, A_CENTER, F_DX, IN_0, 0, 0); 
add(new JButton("test1"), gbc); 
gbc = new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, A_CENTER, F_NONE, IN_0, 0, 0); 
add(new JButton("test2"), gbc); 
gbc = new GridBagConstraints(2, 0, 1, 1, 50.0, 0.0, A_CENTER, F_DX, IN_0, 0, 0); 
add(new JButton("test1"), gbc); 

显然有很多更可以用网格包做的,你需要做一些抛光,达到您想看什么,但这应该让你开始。

GBC构造函数中的第五个参数是在x方向上拉伸的权重。设置它们相等,并强制中心组件不能伸展(F_NONE),这样做是肮脏的工作。

+0

您可以重复使用的GridBagConstraints:P。 我会做左侧被定位西,右东锚和中间一个中心 – 2010-12-21 15:28:18

+0

有过多如何使用GridBags :)我只是剪切和粘贴最近使用过的东西。就重用GBC而言......我觉得它使得代码不易读。很难看出你是否忘记了设置其中一个限制。 – 2010-12-21 15:34:12

1

MigLayout经理怎么样?它不是JRE的一部分,但它是一个出色的布局管理器,它可以使用比GridBag更少的代码轻松生成所需的布局。看看他们的demo

忍不住张贴totally grid bag卡通...享受(: