复杂的布局管理器

1.使用网格组管理器进行布局的步骤:

 (1)建立一个GridBagLayout的对象,不需要指定网络的行数和列数

 (2)将GridBagLayout的对象设置成组件的布局管理器

 (3)为每个组件建立一个GridBagConstraints对象,设置GridBagConstraints对象的域以便指出组件在网格组中的布局方案

 (4)最后,通过下面的调用添加组件的约束:add(component,constraints)

2.GridBagConstraints对象状态的约束

 (1)gridx,gridy,gridwidth,gridheight参数(前两个指定了被添加组件左上角的行列位置(0,0)代表最左上角,后2个指定了组件占据的行数和列数)

 (2)增量域  如果想让一行或一列的大小保持不变,就需要将这行、这列的所有组件的增量都设置为0。注意,增量并不是给出列的相对大小,当容器超过首选大小时,增量表示分配给每个区域的扩展比例值。建议将所有增量的值设置为100.

 (3)fill和anchor参数如果不希望组件拉伸至整个区域,就需要设置fill约束。它有四个值:GridBagConstraints.NONE、GridBagConstraints.HORIXONTAL、GridBagConstraints.VERTICAL和GridBagConstraints.BOTH。

          如果组件没有填充整个区域,可以通过设置anchor域指定其值。有效值为GridBagConstraints.CENTER(默认值)、GridBagConstraints.NORTH、GridBagConstraints.NORTHEAST和GridBagConstraints.EAST等

 (4)填塞 可以通过设置GridBagLayout的insets域在组件周围增加附加的空白区域。通过设置Insets对象的left、top、right、和bottom指定组件周围的空间量,这被称作外部填塞

         通过设置ipadx和ipady指定内部填塞,这两个值被添加到组件的最小宽度和最小高度上

3.网格组布局的策略

 (1)在纸上画出组件布局草图

 (2)找出一种网格,小组件被放置在一个单元格内,大组件将横跨多个单元格

 (3)用0,1,2,........标识网格的行和列,现在可以读取gridx,gridy,gridwidth和gridheight的值

 (4)对于每个组件,需要考虑下列问题,是否需要水平或者垂直填充他所在的单元格?如果不需要,希望如何排列?这就是fill和anchor参数的设置

 (5)将所有的增量设置为100.如果需要某行某列始终保持默认的大小,就将这行或这列中所有组件的weightx和weighty设置为0

 (6)编写代码,仔细地检查GridBagConstraints的设置

 (7)编译运行

4.定制布局管理器

 (1)可以使用下面方法定制布局管理器

        *定制布局管理器必须实现LayoutManager接口,并且需要定义下面5个方法

            *void addLayoutComponent(String s,Component c);

            *void removeLayoutComponent(Component c);

            *Dimensio preferredLayoutSize(Container parent);

            *dimension minimumLayoutSize(Container parent);

            *void layoutContainer(Container parent);

        在添加或删除一个组件时会调用前面两个方法,如果不需要保存组件的任何附加信息,那么可以将这两个方法置为空,接下来的两个方法计算组件的最小布局和首选布局所需要的空间,两者通常相等,第5个方法真正地实施操作,它调用所有组件的setBounds方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值