java网格包GridBagLayout布局管理器专题_第1页
java网格包GridBagLayout布局管理器专题_第2页
java网格包GridBagLayout布局管理器专题_第3页
java网格包GridBagLayout布局管理器专题_第4页
java网格包GridBagLayout布局管理器专题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、gridbaglayout网格包布局管理器网格包布局管理是最复杂和灵活的布局管理,在下面偶会作详细的介绍。与网格布局管理器不同的是,网格包布局管理器允许容器屮各个组件的人小各不相同,还允许组件跨越多个网格,也 允许纽件之间相互部分重叠。网格包布局理解为网格单元布局更合理,因为一个容器被划分为若干个网榕单元,而每个组件放置在一个或多个网格 单元中。要注意的是,网格包布局不能指定一个容器的网格单元的大小其网格单元的划分是通过weightx和weighty参数来设置 的,但也不是直接指定其网格单元的大小。当把一个组件放證在网格单元小时,组件所占据的位迸和人小是由一组与 他们相关联的约束来决定的。这些

2、约束是由gridbagconstraints类型的对彖来设置的,关于gridbagconstraints类型, 后而会做专门的介绍。由上所述使用网格包布局的一般步骤为:1、创建一个gridbaglayout网格包布局对彖,并使其成为当前容器的布局管理器。2、创建一个gridbagconstraints类型的约束对彖,然后使用该对彖设置各种约束条件,注意这里设置的约束条件 并没冇针对某一组件,要使某一组件具冇设置的约束,盂要使用第3步骤的方法。3然后使用 gridbaglayout 网格包布局小的 setconstraints(component com, gridbagconstraints

3、cons)方法将 gridbagconstraints类型对彖设置的约束添加到被设置的组件中,这样该组件就具冇了 gridbagconstraints设置 的约束。其中setconstraints()的第一个参数是将要添加的组件,笫二个参数是gridbagconstraints类烈的约束对 象。4、最后将设置了约束的组件添加到容器中。使用网格包布局的第二种方法为:1、使gridbaglayout布局成为当前容器的布局管理器,这里也以不川创建gridbaglayout对象。2、创建一个gridbagconstraints类型的约束对象,然后使用该对象设置约束条件。注意这里设置的约束条件并没 有针

4、对某一组件,要使某一组件具有设置的约束,需要使用第3步骤的方法。3、然后使川add(component com, object cons)方法将组件和约束同时添加进容器中,这样添加进容器的组件就具冇 了笫2步的约束。注意其屮的add(component com, object cons);笫一个参数是将要添加的纽件,笫二个参数是要 添加的gridbagconstraints类型的约束对象。gridbagconstraints类型的约束参数:double weightx 和 double weighty 参数(默认值为 0)这是两个非常重要的参数,该参数直接影响到怎样设置网格单元的人小,因此帘握

5、好该参数就可以对网格包布局应川 口如。该参数对x方向和y方向指定一个加权值。这个加权值直接影响到网格单元的大小,比如weightx的值分別为10, 20, 30,贝u在容器的x方向也就是列的方向,按一定的比例(比如1:2:3其具体算法请参看java文件)分配三个网格单元,其 中加权值越大网格单元就越大,可以看出值的大小是没冇关系的,加权值的作用是让容器以设定的值的比例在横向和 纵向分配网格,且在容器的人小改变时这个比例不改变。如果weightx只设置了一个值,而组件却不只一个以上,则被设置了的这个组件的网格单元的大小为容器在x方向的大 小减去那两个组件的最小尺寸就是该组件的网格单元人小。默认情

6、况下组件的最小尺寸是比较小的。如果两个参数都为0(默认值),则组件会被显示在容器的中央,不管容器是放大还是缩小组件都只会显示在容器的中央。 由上所述,在使用网格包布局时首先应先使用weightx和weighty来划分网格单元(不是直接划分,而是按一定比例來划 分),网格单元划分出来后,组件放置在网格单元中的位置和大小就由后而介绍的约束来决定。一淀要注意的是设直权值后要使当前的设置牛效应使用setconstraints()函数一次,如果连续设置多个同-方向的权值, 则只有最后-次设置的权值有效,比如岀现同时两行都设置了 x方向的权值,则以最后一行设置的x方向的权值为标 准來划分网格单元。因此在使

7、用gridbaglayout网格包布局管理器之前应先设置好网格单元,即要把容器划分为儿行儿列的网格单元,每行 每列在容器小的宽度和高度比例,每个组件应在哪个网格单元。int fill 参数(默认值为 gridbagconstraints.none)fill参数指定组件填充网格的方式,当某组件的网格单元人于组件的人小时被使用,一般情况卜组件是以最小的方式 被显示的,如來不使用fill参数,则有可能组件占不完整个网格单元,也就是说组件占据的空间比划分的网格单元小, 这时组件将显示在网格单元中的某个位置(具体在什么位置由网格包中的参数来设置)。其可取的值如下:gridbagconstraints.n

8、one默认值,不改变组件的大小。gridbagconstraints.horizontal使组件足够大,以填充其网格单元的水平方向,但不改变高度,其值等于整数2。 gridbagconstraints.vertical使组件足够大,以填充其网格单元的垂直方向,但不改变宽度,其值等于整数3。 gridbagconstraints.both使组件足够大,以填充其整个网格单元,其值等于整数1。int gridwidth 和int gridheight 参数(默认值为 1)该参数指定组件占据多少个网格单元gridwidth指定组件占据多少个网格单元的宽度,gridheight指定组件占据多 少个网格单

9、元的高度。两个参数的默认值都为1。其屮值gridbagconstraints.remainder示当前组件在其行或列上为 最后一个组件,也就是说如果是行上的最后一个组件的话,那么下一个组件将会被添加到容器中的下一行,如果在行 上不指定该值(同时也不指定gridx和gricly参数),那么无论添加多少个组件都是在同一行上,同样如果在列上不指定该 值(同时也不指定gridx和前dy参数)则无论添加多少行组件,都无法把容器填满。值gridbagconstraints.relattve衣示 当前组件在其行或列上为倒数第二个组件。import java .awl*;public class progra

10、mpublic static void main(string args) frame ff = new frame();gridbaglayout gr = new gridbaglayout():gridbagconstraints gc = new gridbagconstraints(); 创建个名为gc的约束对象ff. setlayout (gr) ;/将容器ff的布局设为gridbaglayout创建一组按钮组件butto n bbl二newbutton("bbl");butto nbb2二newbutton czbb2z,);but to nbb3二newbu

11、tton (,zbb3,z);button bbd=newbutton (z,bb4,/) ;buttonbb5=newbuttonc,bb5,/);buttonbb6=newbutton ("bb6");button bb7=newbutton("bb7");buttonbb8二newbutton(/zbb8z,);gc. fill = gridbagconstraints. both;/设置约束的fi 11参数,该参数表示当组件的大小小于网格单元的大小时在水平和垂直 方向都填充,gc. weightx =11; /设置x方向的加权值为11。gc. w

12、eighty = 11;/设置y方向的加权值为11。gr. setconstraints(bbl, gc); /将以上gc所设置的约束应用到按钮组件bblgc. weightx = 22;/设置x方向的加权值为22,如果不设置weightx贝u以下的组件都将自动应用上面所设置的weightx值11。gr. setconstraints(bb2, gc) ;/将以上所设置的约束应川到按钮组件bb2。/gc.wcighty=lll; 注意如果不注释掉该行,则以后使川gc约束的按钮组件在y方向的加权值将为111,而在前面设置的y方向 的加权值11将失去作用。gc. wcightx =33;gc.gr

13、idwidth = gridbagconstraints. remainder;/设置gridwidth参数的值为remainder这样在后面使用该约束的组件将是该 行的授后一个组件。gr. setconstraints(bb3, gc); /第一行添加了三个按钮组件bbl, bb2, bb3,且这3个按钮的宽度按weightx设置的值11, 22, 33按 比例设置宽度gridbagconstraints gel = new gridbagconstraints() ;/创建第二个约束gel gel f订1 = gridbagconstiaints. both;gel. weighty =

14、22; 将第2彳j:的y方向加权值设为22gr. setconstraints(bb4, gel);gr. setconstraints(bb5, gel);gel. gridwidth = gridbagconstraints. remainder;gr. setconstraints(bb6, gel) ;/第二彳亍添加了三个按钮纽.件bb4, bb5, bb6gel. weighty 二33;gel. gridwidth = gridbagconstraints. remainder;gr. setconstraints(bb7, gel);/第三行添加了 个按钮组件bb7gel wei

15、ghty二0;gr. setconstraints(bb8, gel); 第四行添加了一个按钮组件bb8, bb8并没有添加到bb7的后面,因为bb8使用了bb7前面的 gridwidth参数设置的值,所以bb8也是单独的一行。ff. setsize(500, 300);ff. add (bbl): f f. add (bb2); f f. add (bb3); f f. add (bb4); f f. add (bb5); ff. add(bb6); ff. add(bb7); ff. add(bb8);ff. setvisible(true) ; 这两行的weightx的值 分别为11,2

16、2,33可以看 到bbl,bb2,bb3按钮的 宽度是不一样的,他们 是按weightx设置的比 例來设定的,因此当容 器进行缩放时,组件会 随之缩放这3列的weighty的值 分别为11,22,33可以看 到3行按钮的高度是不 一样的,他们是按 weighty设置的比例来 设定的,因此当容器进 行缩放时,纽件会随之 缩放参数fill设置为gridbagconstraints.both时的效果按钮bbl,bb2,bb3的fill参数使用默认值的悄况,从此图可以 看出来,当fill设为默认值时,在组件的网格单元屮,多余的 空间是空口的,没有被填充,如果把fill设为 gridbagconstra

17、ints.both 贝u bbl,bb2,bb3 的 效果将 打 bb4,bb5,bb6相同。从此图中也可以看出使用weightx和weighty 设置网格单元的情形,bbl,bb2,bb3纽件山据的网格单元大于 组件的大小。参数fill使用默认值(即不填充)时的情况int gridx和int gridy参数(默认值为 gridbagconstraints.relative)该参数表示组件被添加到容器中的x或者y坐标处,坐标以网格单元为单位,也就是说不管网格单元有多人,一个网格 单元就是1x1的大小,也就是说如果把gridx和gridy都设为1,那么该组件会被显示到第二行的行二列上。其中值 g

18、ridbagconstraints.relative(认值)表示当前组件紧跟在上一个组件的后面。int ipadx和int ipady参数(默认值为0)ipadx和inady也被称为内部填充,该参数用以设宜组件的最小尺寸,如果参数值为正值则组件的最小尺寸将比原始最小 尺寸大,如果为负值,贝u组件的最小尺寸将会变得比原始的最小尺寸小。该参数也可以理解为直接为组件指定大小, 这个设置的大小就是组件的最小尺寸。其设置后组件的大小为组件的原始授小尺寸加上ipadx*2个像素。int anchor 参数(默认值为 gridbagconstraints.center)该参数指定当组件的大小小于网格单元吋,

19、组件在网格单元中的位置。-般情况下,在设置了 weightx或者weighty的 加权值时,如果不使用fill参数填充空白区域,贝ij组件的大小将小于网格单元的大小,这时使用anchor参数就能看到 其中的效果了。anchor 参数可収的值有:gridbagconstraints.center ; gridbagconstraints.north ; gridb agconstraints. n orthe ast; gridb agconstraints. east ;gridbagconstraints.southeast;gridbagconstraints.south; gridbag

20、constraints.southwest ; gridbagconstraints.west ;gridbagconstraints.northwest;即居中,北,东北,东,东南,南,西南,西,西北方向。insets insets参数(默认值为0)insets参数也被称为外部填充,该参数指定组件与网格单元z间的授小空白区域大小,要注意的是即使使川了 fill参数 填充横向和纵向但只要设置了 insets参数,同样会留出insets所设置的空片区域,在insets设置的空白区域不会被填充。 在使用该参数时需要设置对象的top, left, right, bottom四个方向的值来调整组件与网

21、格单元z间的空白区域大小, 比如 gc.insets=new insets( 10,10,10,10);k111 gc 是 gridbagconstraints 类型的约束对象,这里要注意后面的 new insets k 中的insets第一个字母是大写的。当然也可以为insets指定负值,以扩大其网格单元。示例:import javaawt*;public class program(public static void main(string args)/将容器f f的布局设为gr i dbaglayou tframe ff = new frame();gridbaglayout gr =

22、 new gridbaglayout():gridbagconstraints gc = new gridbagconstraints() ; /创建个名为gc的约束对象ff setlayout (gr);创建一组按钮组件button bbl = new button("bbl");button bbl = new button(,zbb4,z);button bb7 = new button(z,bb7,z);button bb2 = new button("bb2");button bb5 = new button("bb5");

23、button bb8 = new button(z,bb8,z);button bb3 = new button("bb3");button bb6 = new butlon(,bb6,z);gc. fill = gridbagconstrainis. both;gc.weightx = 11; gc. weighty =11;gr setconstraints(bbl, gc);gc.weightx = 22;gc. gridx = 1; gc. gridy = 1;/将下一个组件放置在坐标为1,1的位置。gr.setconstraints(bb2, gc);gc.wei

24、ghtx = 33;gc. gridx = 2; gc. gridy = 1: /将下一个组件放置在坐标为2, 1的位置。gc. insets = new tnsets(-10, to, to, to); /将下一个组件与网格单元的空白区域向外扩展10个像素,在这里可以看到网 格包布局允许组件z间重叠。gc. gridwidth = gridbagconstraints. remainder;gr.setconstraints(bb3t gc);gridbagconstrainis gel = new gridbagconstraints();gel. weighty = 22;gel. ip

25、adx = 50; gel. ipady = 50; /将组件的垠小尺寸加大ipadx*2个像素。gr. setconstraints(bb4, gel);gel. ipadx 二 0;gel. ipady = 0; 将以后的组件的最小尺寸设克为默认值,如果省掉该行,则以后组件的最小尺寸都会加大ipadx*2个像素。gel. anchor = gridbagconstraints. northwest: /将下一个组件bb5的位置放置在单元网格的西北方向。gr. setconstraints(bb5, gel) ; /因为bb5未设置fill,同时bb5设f weightx(lllgc参数设賈)和weighty两个值以确定bb5所在 的网格单元的大小,因而组件bb5的原始最小尺寸无法占据整个网格单元。gel. fill = gridbagconstraints. b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论