我无法让我的 3 个面板正确对齐。 我基本上有 1 个大面板和 2 个较小(不一定相同)的面板。 大的在左边,2 个小的在右边,一个在另一个上面。组件应保持可动态调整大小。
我要的是这个(9是大的,1是小的,2是小的):
999999 111
999999 111
999999 111
999999 222
999999 222
我得到的是这样的:
999999 111
999999 111
999999 111
999999
999999
222
222
我的代码如下,大的是 graphsimscrollpane,小的是 workpanel 和 informationpanel:
private void createLayout(GroupLayout groupLayout) {
groupLayout.setHorizontalGroup(
groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(graphSimScrollPane, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap(20, Short.MAX_VALUE)
.addGroup(groupLayout.createParallelGroup(Alignment.CENTER)
.addComponent(workPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(informationPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.CENTER)
.addComponent(graphSimScrollPane, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(workPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(informationPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
guiFrame.getContentPane().setLayout(groupLayout);
}
最佳答案
GroupLayout 的基本结构类似于以下代码:
JPanel pnl = new JPanel();
GroupLayout l = new GroupLayout(pnl);
pnl.setLayout(l);
JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
JButton b3 = new JButton("3");
l.setHorizontalGroup(
l.createSequentialGroup()
.addComponent(b1)
.addGroup(l.createParallelGroup()
.addComponent(b2)
.addComponent(b3)));
l.setVerticalGroup(
l.createParallelGroup()
.addComponent(b1)
.addGroup(l.createSequentialGroup()
.addComponent(b2)
.addComponent(b3)));
JFrame f = new JFrame("test");
f.setContentPane(pnl);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(1024, 768);
f.setVisible(true);
用简单的英语来说,横轴上的约束是“b1,然后是平行的 b2 和 b3”。纵轴上的约束为“b1 与由 b1 然后 b2 组成的组平行”。
显然,这里缺少可调整大小属性。您需要提供更多详细信息,说明您希望组件如何根据其大小进行操作。
一种可能性是为两个小组件提供整个垂直空间,但只为它们提供首选的水平空间。当然,给大组件剩余的空间。
l.setHorizontalGroup(
l.createSequentialGroup()
.addComponent(b1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(l.createParallelGroup()
.addComponent(b2, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(b3, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)));
l.setVerticalGroup(
l.createParallelGroup()
.addComponent(b1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(l.createSequentialGroup()
.addComponent(b2, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(b3, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
请注意,结构与第一个代码相同,只是添加了尺寸参数。
关于Java使用grouplayout对齐3个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876159/