我们有必要了解一下GridBagConstraints中各个属性的具体含义以便我们更好的进行个性化的布局
@gridx,gridy:
组件左上角所在的位置,如上图中左侧的面板在1行0列,则gridy=0,gridx=1。读者请注意这里的行对应的是gridy,列对应的是gridx
@gridwidth,gridheight
组件占据的行数和列数,如最上面的那个面板占了1行2列,则gridwidth=2,gridheight=1
@weightx,weighty
可以简单理解为组件大小变化的增量值,如设置weightx=100,组件会随着单元格而变化,设置weightx=0时,组件大小不会发生变化。当然weightx,weighty也可以设置成其他的值,不过意义不大,就不再详细介绍。
@fill
组件在所处格子(分配区域)内的填充方式
如fill= HORIZONTAL,组件就只在水平方向上填充满单元格,取fill= BOTH则会填满整个格子。
@anchor
组件在所处格子内的对其方式,取anchor=EAST就是指右对齐
@ipadx,ipady
内部填充,是指在组件首选大小的基础上x方向上加上ipadx,y方向上加上ipady,这样做就可以保证组件不会收缩到ipadx,ipady所确定的大小以下,因此我们可以用ipadx,ipady的值来指定组件的大小,而不必指定组件的大小否则会有意想不到的效果
@insets
外部填充,填充的区域是组件与所处格子边框之间的部分,有left,top,right,bottom四个参数,不过当组件的fill=NONE时,指定insects值是无意义的
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class GridBagLayoutDemo extends JFrame {
public static void main(String[] args) {
// TODO Auto-generated method stub
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GridBagLayoutDemo demo = new GridBagLayoutDemo();
demo.setTitle("GridBagLayout");
demo.setSize(500,400);
demo.setVisible(true);
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.setLocationRelativeTo(null);
}
});
}
public GridBagLayoutDemo(){
setLayout(new GridBagLayout());
//上侧面板
JPanel topPanel = new JPanel();
topPanel.setBackground(Color.blue);
GBD gbd = new GBD(0,0,2,1);
add(topPanel,gbd.setFill(GBD.BOTH).setWeitht(100, 0).setIpad(70, 90));
//左侧面板
JPanel leftPanel = new JPanel();
leftPanel.setBackground(Color.yellow);
GBD gbd2 = new GBD(0,1);
add(leftPanel,gbd2.setFill(GBD.BOTH).setWeitht(0, 100).setIpad(70, 70));
//右侧面板
JPanel drawPanel = new JPanel();
drawPanel.setBackground(Color.red);
this.add(drawPanel,new GBD(1,1).setFill(GBD.BOTH));
//中部面板
//下部面板
}
}
class GBD extends GridBagConstraints{
//设置子组件是在哪个位置上,哪一列,哪一行
public GBD(int grdx,int grdy){
this.gridx = grdx;
this.gridy = grdy;
}
//设置子组件在哪个位置,占用多少个格子
public GBD(int grix,int griy,int griwidth,int griheight){
this.gridx = grix;
this.gridy = griy;
this.gridwidth = griwidth;
this.gridheight = griheight;
}
//设置组件在所处格子内的对其方式
public GBD setAnchor(int anchor){
this.anchor = anchor;
return this;
}
//设置组件在所处格子(分配区域)内的填充方式
public GBD setFill(int fill){
this.fill = fill;
return this;
}
//组件大小变化的增量值
public GBD setWeitht(int weightx,int weighty){
this.weightx = weightx;
this.weighty = weighty;
return this;
}
//设置填充的区域是组件与所处格子边框之间的部分
public GBD setInsets(int top,int left,int bottom, int right){
this.insets = new Insets(top, left, bottom, right);
return this;
}
//组件首选大小的基础上x方向上加上ipadx,y方向上加上ipady,
public GBD setIpad(int ipadx,int ipady){
this.ipadx = ipadx;
this.ipady = ipady;
return this;
}
}