Java使用grouplayout对齐3个面板
作者:互联网
我不能让我的3个面板正确对齐.
我基本上有1个大面板和2个较小(不一定相同)的面板.
大的一个在左边,两个小的在右边,一个在另一个之上.组件应保持动态可调整大小.
我想要的是这个(9是大的,1是小的一个,2是另一个小的):
999999 111
999999 111
999999 111
999999 222
999999 222
我得到的是这个:
999999 111
999999 111
999999 111
999999
999999
222
222
我的代码如下,graphimscrollpane大一个,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,swing,layout-manager,grouplayout 来源: https://codeday.me/bug/20190613/1230133.html