【问题标题】:Swing: easiest way to align width of [dynamic][static][dynamic] components?Swing:对齐 [动态] [静态] [动态] 组件宽度的最简单方法?
【发布时间】:2010-12-21 00:19:51
【问题描述】:

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

  • Component1Component3动态宽度调整为相等

  • Component2(介于两者之间)具有恒定宽度?

假设我们有一些可调整大小的 JPanel(例如在 JFrame 中)。

小宽度应如下所示:

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

大宽度应该是这样的:

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

注意:我只是用GroupLayout“试错”了太久。

【问题讨论】:

    标签: java swing layout layout-manager


    【解决方案1】:

    一个选项是使用GridBagLayout。一个快速而肮脏的 sn-p 让你开始:

    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) 会做脏活。

    【讨论】:

    • 你可以重复使用 GridBagConstraints :P 我会让左边的锚点向西,右边的锚点向东,中间的锚点居中。
    • 有很多方法可以使用 GridBags :) 我刚刚剪切并粘贴了我最近使用的东西。至于重用GBC的......我觉得它使代码的可读性降低。很难看出您是否只是忘记设置其中一个约束。
    【解决方案2】:

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

    忍不住发了totally grid bag卡通...享受(:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多