我正在尝试在我的应用程序中构建一个GUI窗口。我要做的是有一个窗口,顶部有几个按钮,还有一个大文本区域。像这样:
+--------------------------------------------------+
| [button1] [button2] [button3] |
| +----------------------------------------------+ |
| | text area | |
| | | |
| | | |
| | | |
| +----------------------------------------------+ |
+--------------------------------------------------+
我几乎在那里,使用GroupLayout:
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(button1)
.addComponent(button2))
.addComponent(closeWindow))
.addComponent(textarea1)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addComponent(button3))
.addComponent(textarea)
);
问题是,这最终会使button3与左边对齐,另外两个。我似乎无法弄清楚如何只在一个按钮上指定对齐方式。我可以在整个按钮栏上进行GroupLayout.Alignment.TRAILING,但是它会击中所有3个按钮,这也不太正确。
那么正确的方法是什么?由于对齐仅适用于并行组,我不认为拥有一个包含两个顺序组的HorizontalGroup会有帮助吗?
我错过了什么?
答案 0 :(得分:11)
在顺序组中添加间隙。保留水平组:
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(button3))
.addComponent(textarea)
);
与这些参数的差距充当了“弹簧”,占据了所有可用空间。
答案 1 :(得分:3)
尝试添加:
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)
第二个按钮后。 MAX_VALUE将导致间隙尽可能多地扩展。
答案 2 :(得分:1)
您想要使用仅在顺序组上可用的addPreferredGap()。下面的代码为您提供了所需的布局。
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup( layout.createSequentialGroup()
.addComponent( button1 )
.addComponent( button2 )
.addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
.addComponent( button3 ) )
.addComponent( textArea )
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup( layout.createParallelGroup()
.addComponent( button1 )
.addComponent( button2 )
.addComponent( button3 ) )
.addComponent( textArea )
);