Swing:最简单的方法来对齐[dynamic] [静态] [动态]组件的宽度?

时间:2010-12-21 00:19:52

标签: java swing layout layout-manager

标准Java Swing中最简单的方法是以这样的方式对齐三个组件:

  • Component1Component3动态宽度 调整为相等

  • 虽然Component2(介于两者之间)有常量宽度?

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

小宽度应如下所示:

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

大宽度应如下所示:

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

注意:我对GroupLayout进行了长时间的“试用和纠错”。

2 个答案:

答案 0 :(得分: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);

显然你可以用GridBag做更多的事情,你需要做一些抛光才能准确地得到你想要的东西,但这应该让你开始。

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

答案 1 :(得分:1)

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

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