Java Swing MigLayout,将两个元素放在跨行的中间

Java Swing MigLayout,将两个元素放在跨行的中间,java,swing,miglayout,Java,Swing,Miglayout,我正在处理一个3列4行的MigLayout表单,如下所示: "wrap 3", "[15%] 15px [45%] 15px [40%]", "20 [] 15 [] 15 [grow,fill] 15 []" .------------------------------------. | 15% | 45% | 40% | |------------------------------------| | | |

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

"wrap 3",
"[15%] 15px [45%] 15px [40%]",
"20 [] 15 [] 15 [grow,fill] 15 []"
.------------------------------------.
| 15% |     45%      |     40%       |
|------------------------------------|
|     |              |               |
|------------------------------------|
|     |              |               |
|------------------------------------|
|           button,button            |
`------------------------------------´
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");
现在我的目标是让它看起来像这样:

"wrap 3",
"[15%] 15px [45%] 15px [40%]",
"20 [] 15 [] 15 [grow,fill] 15 []"
.------------------------------------.
| 15% |     45%      |     40%       |
|------------------------------------|
|     |              |               |
|------------------------------------|
|     |              |               |
|------------------------------------|
|           button,button            |
`------------------------------------´
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");
我希望最后一行的按钮居中,因此我假设它首先要求我将第四行的3列跨入一列,并在按钮上设置
“span 3,center”
组件约束


这只需要一个按钮就可以很好地工作,但是我在计算如何添加第二个按钮时遇到了问题,同时使两个按钮同时位于同一行的中心。如果我在第二个按钮上添加相同的约束,它将完全居中显示在下一行第一个按钮的下方。

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


我正在努力想另一种方法。

你可以试着在左右两侧放置两个会增长的盒子,或者按下中间的按钮,如下所示:

"wrap 3",
"[15%] 15px [45%] 15px [40%]",
"20 [] 15 [] 15 [grow,fill] 15 []"
.------------------------------------.
| 15% |     45%      |     40%       |
|------------------------------------|
|     |              |               |
|------------------------------------|
|     |              |               |
|------------------------------------|
|           button,button            |
`------------------------------------´
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");
解决方案是同时进行跨距和拆分:拆分定义了应位于跨距单元中的组件数量:

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

旁白:不带计数的范围默认为一个高数字,它实际上意味着“全部”

我最后是这样编码的,非常简单。尽管我怀疑在MigLayout的质量中的某个地方可能是一种不用容器面板的方法:@mKorbel是的,谢谢你的提醒:-)请随时编辑未来的疏忽