【问题标题】:Java Swing MigLayout, centering two elements inside a spanned rowJava Swing MigLayout,在跨行中居中两个元素
【发布时间】:2023-04-02 14:30:01
【问题描述】:

我正在处理一个 3 列 4 行的 MigLayout 表单,如下所示:

"wrap 3",
"[15%] 15px [45%] 15px [40%]",
"20 [] 15 [] 15 [grow,fill] 15 []"

现在我的目标是让它看起来像这样:

.------------------------------------.
| 15% |     45%      |     40%       |
|------------------------------------|
|     |              |               |
|------------------------------------|
|     |              |               |
|------------------------------------|
|           button,button            |
`------------------------------------´

我希望最后一行上的按钮居中,所以我假设它首先要求我将第 4 行的 3 列与按钮上的 "span 3, center" 组件约束跨越成一列。

这仅适用于一个按钮,但我在弄清楚如何添加第二个按钮时遇到问题,同时保持两个按钮在同一行居中。如果我在第二个按钮上添加相同的约束,它会在下一行的第一个按钮下方完美居中。

【问题讨论】:

    标签: java swing miglayout


    【解决方案1】:

    解决方案是同时进行span split:split 定义了spanned cell中应该存在的组件数量:

    panel.add(firstButton, "span, split 2, center");
    panel.add(secondButton);
    

    除此之外:没有计数的跨度默认为一个很大的数字,它实际上意味着“全部”

    【讨论】:

    • @mKorbel 是的,感谢您的提醒 :-) 请随时编辑未来的疏忽
    【解决方案2】:

    这并不理想,但您可以将这两个按钮添加到新的 JPanel,然后将该 JPanel 嵌套在现有布局中,并使用“span 3, center”

    我正在努力想其他方法。

    【讨论】:

    • 我最后是这样编码的,很简单。尽管我怀疑 MigLayout 的某个地方可能是在没有容器面板的情况下执行此操作的一种方式。 :)
    【解决方案3】:

    你可以试着在左右两边放两个盒子,它们会变大,或者像这样按下中间的按钮:

    pane.setLayout(new MigLayout("fill"));
    pane.add(Box.createHorizontalBox(), "push");
    pane.add(new JButton("asdf"));
    pane.add(new JButton("zxcv"));
    pane.add(Box.createHorizontalBox(), "push,wrap");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2012-05-26
      • 2015-05-28
      • 2018-03-26
      • 2011-06-04
      • 2020-10-26
      • 1970-01-01
      相关资源
      最近更新 更多