遇到的问题
最近在做java swing的桌面程序,要把一些按钮标签等控件放到frame中。
最开始使用的是setbounds()这个方法,虽然能够构造出了精美的界面,但是如果改变屏幕分辨率,界面立马就变得非常怪异了。
另外,每添加一个控件都需要重新计算起始点、宽度、高度等等,很麻烦。
整体架构流程
使用GroupLayout可以完美的解决上述的问题。
简单来说,GroupLayout就是各个元素(或者组)相对于水平轴(Horizontal)和垂直轴(Vertical)的排列方式来管理元素。
每一种Container(容器 比如JFrame或JPanel)都可以使用下列方法设置GroupLayout
GroupLayout gl = new GroupLayout(container);
container.setLayout(gl);
当有了布局对象,接下来要做的就是实现这两个方法:
gl.setHorizontalGroup(Group group);//设置水平布局
gl.setVerticalGroup(Group group);//设置垂直布局
其中group是组对象,有两种排列方式的组对象如下所示:
其中串行和并行就是高中物理电路中的意思。
通过以下语句分别可以建立串行组和并行组
gl.createParallelGroup();
gl.createSequentialGroup();
有了组对象Group,再把元素(或者更下一级的组)添加上,就实现了布局了。
group.addComponent(component);
group.addGroup(group1);
方向与串/并行
之前说到groupLayout对象需要实现水平和垂直两个方法,但是水平和垂直对于元素的排列方式是不一样的,比如下列三个元素,从垂直的角度看是串行(SequentialGroup),但是从水平的角度他是并行的(ParallelGroup)。
因此如果需要布局上图,水平和垂直的代码如下所示
//水平角度并行
gl.setHorizontalGroup(
gl.createParallelGroup()
.addComponent(c1)
.addComponent(c2)
.addGroup(g1))
//垂直角度串行
gl.setsetVerticalGroup(
gl.createSequentialGroup()
.addComponent(c1)
.addComponent(c2)
.addGroup(g1))
以下三个元素正好相反,从垂直的角度看是并行的(ParallelGroup),但是从水平的角度他是串行(SequentialGroup)。
小结
使用GroupLayout可以提高设计的效率。