Java学习笔记(1)-(GridBagLayout)网格袋布局

学习JAVA-布局管理的时候,在书上看到了这么一段话:GridBagLayout的功能非常强大,使用是也比较复杂,考虑到一般的读者很少会使用到这种管理,这里不做介绍。然书本就跳过了,为什么功能强大却很少会使用呢?或者因为那个“一般”?

于是我到网上查了查GridBagLayout(网格布袋布局)的用法。

感谢:链接

(0_o)


 

两个主要的类:

  GridBagLayout();布局管理器,和其他的布局管理器用法差不多;

  GridBagConstraints();约束管理器,主要用来约束放到GridBagLayout中的组件的属性,比如:位置,大小,外部填充,内部填充等等属性;

主要的约束及其值:

  普通约束:int gridx,gridy;——组件插入哪个指定的网格,如左上角的网格坐标为0,0;默认为RELATIVE,即在上一个add的表格坐标上加一;如上一个是(1,1)则               设置(RELATIVE,RELATIVE)后,添加的下一个组件坐标为(2,2);

       int  gridwidth,gridheight;——组件横向,纵向横跨多少个网格,默认值为1,有两个值:REMAINDER(设置此约束后,下一个添加的就是此行或则和列的                     最后一个,一般列不常用,经常用来换行),RELATIVE(该组件是该行或者列的倒数第二个,常用在纵向上);

  伸缩约束:int fill;——指在窗口被伸缩时组件如何跟着自动伸缩;

          有四个值:NONE:组件不动,不占空白区域;HORIZONTAL:组件可以水平方向上伸 缩;VERTICAL:垂直伸缩;BOTH:双向伸缩;

       int weightx, weighty:组件在横向和纵向上如何按比例伸缩;

  组件尺寸约束规则:int ipadx, ipady:即inner padding x and y,即组件的内部填充尺寸,比如一个按钮,就是按钮的文字和按钮边框之间的空间;

           Insets insets:规定了外部填充区域的大小,实际指定了组件实施区域的边间直接的距离,比如一个空间和网格之间的空间;

           anchor:组件在显示区域中的位置,总共有9个方位,分别是东南西北中、东北、西北、东南、西南,英文就不枚举了,比如南是SOUTH,东              北是NORTHEAST,其它类推;

  规则:每次GridBagLayout只能根据所设置的GridBagConstraints约束


 

try:

 1 import java.awt.*;
 2 import javax.swing.*;
 3 
 4 public class GridBagLayoutDemo {
 5     private static final int EXIT_ON_CLOSE = 0;
 6     private JFrame f=new JFrame("GradBagLayout test");
 7     //创建网格布局
 8     private GridBagLayout gbl=new GridBagLayout();
 9     //创建月暑期
10     private GridBagConstraints gbc=new GridBagConstraints();
11     //创建10存放按钮的空间
12     private JButton but[]=new JButton[11];
13     
14     //添加按钮方法
15     private void addButton(JButton but) {
16         //给网格包布局设定约束器
17         gbl.setConstraints(but, gbc);
18         f.add(but);
19     }
20     
21     //
22     public void init() {
23         //出事还10个按钮
24         for(int i=0;i<11;i++) {
25             but[i]=new JButton("Button"+i);
26             
27         }
28         
29         //设定框架布局模式
30         f.setLayout(gbl);
31         //设定伸缩为两个方向的
32         gbc.fill=GridBagConstraints.BOTH;
33         //设定纵向肾伸缩比例为1:1
34         gbc.weighty=1;
35         //设置纵向的伸缩比例为1:1
36         gbc.weightx = 5; // 第一行的三个都是1:1:1  
37         addButton(but[0]);  
38         addButton(but[1]);  
39         addButton(but[2]);  
40         //这句话的意思是,添加完第三个按钮,接下来的一个位置就是第一行的最后一个,所以添加完第四个就换行了
41         gbc.gridwidth = GridBagConstraints.REMAINDER;  
42         addButton(but[3]);//此行的最后一个
43         // 第2行1个按钮,仍然保持REMAINDER换行状态  
44         addButton(but[4]);  
45 
46         // 第3行2个按钮,分别横跨2格  
47         gbc.gridwidth= 2;  
48         gbc.weightx = 1;  
49         addButton(but[5]);
50         gbc.gridwidth = GridBagConstraints.REMAINDER;//本行最后一个单元格  
51         addButton(but[6]); 
52         
53         //7纵跨2个格子,8、9一上一下  
54         gbc.gridheight = 2;  
55         gbc.gridwidth = 1;  
56         gbc.weightx = 1;  
57         addButton(but[7]); // 由于纵跨2格因此纵向伸缩比例不需要调整,默认为1*2格,比例刚好
58         
59         gbc.gridwidth = GridBagConstraints.REMAINDER;  
60         gbc.gridheight=1;  
61         gbc.weightx=3;  
62         addButton(but[8]);
63         addButton(but[9]);  
64         
65         gbc.gridx=2;
66         gbc.gridy=5;
67         gbc.ipadx=1000;
68         gbc.ipady=500;
69         //设置外部填充区域
70         Insets i=new Insets(10,10,10,10);
71         gbc.insets=i;
72         gbc.anchor=GridBagConstraints.EAST;
73         addButton(but[10]);
74         
75         
76         
77         f.pack();
78         f.setDefaultCloseOperation(EXIT_ON_CLOSE);  
79         f.setVisible(true);  
80         
81     }
82     
83     
84     public static void main(String[] args) {
85         new GridBagLayoutDemo().init();
86     }
87 
88 }

运行效果:


 

学到:

1、GridBagConstraints声明的时候不要给所有参数,直接声明GridBagConstraints gbc=new GridBagConstraints();需要设置哪个约再设置;如gbc.fill=GridBagConstraints.BOTH;

2、网格包布局是网格布局的升级版,也是网格布局和流布局的结合(如果约束器都是默认的话);

 

转载于:https://www.cnblogs.com/Eastry/p/8012974.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值