利用相对坐标轻松完成网格袋布局.
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
电脑知识与技术网络通讯与安全 电脑知识与技术 凡是学习过JAVA的人都知道,JAVA中学习起来最困难、最容易引起混淆的就是JAVA的布局,尤其是网格袋布局,由于它使用了很多约束条件来控制界面,所以学习的人觉得它很复杂,也很灵活,本文将教你利用单元格相对坐标定位轻松搞定网格袋布局。 1网格袋布局 要创建网格袋布局,可以使用GridBagLayout类和助手类GridBagConstraints。GridBagLayout管理器是AWT提供的最灵活、最复杂的布局管理器,它用于定义要放置到单元格中的每个组件 的属性,包括布局、 大小、对齐方式等。助手类GridBagConstraints可以接受几个网格袋约束条件,网格袋约束条件和每个组件之间的关系决定了整个布局,约束条件决定了包含在对象以内的构件参数的定位。 2创建网格袋的一般步骤 2.1利用相对坐标设计网格 在进行创建布局之前,首先要做到心中有数,我们要绘制的用户界面要达到什么样的效果,即进行网格设计,最好将各个组件的位置以单元格的形式绘制在纸上,每个组件有自己的单元格,不能将多个组件放到同一个单元格中,对每个单元格标上坐标(y,x),它们是以单元格为单位,而非像素为单位,并且这个坐标是一个相对坐标,比如下面图1的坐标(0,0)表示是第一个单元格的坐标,那么横向的第二个单元格坐标为(1,0);如果将第一个单元格定义为(2,2),那么横向的第二个单元格坐标为(3,2),以次类推,因为只要你确定了第一个的位置,其他单元格就依次相对改变坐标,不影响整体布局效果,这就是相对坐标,这个坐标在布局中表现为约束中的gridy和gridx。 图1 2.2创建网格的步骤 第一步:创建一个GridBagLayout对象; 构造方法不需要任何参数。 GridBagLayoutgbl=newGridBagLayout() 原则上,这条代码的位置可以比较的随意,只要你在没有调用gbl之前创建都是可以的,一般情况下,我们在将pane添加到窗口之后写这条代码。 第二步:将panel的布局设置为网格袋; 只需要调用panel面板的setLayout方法。如panel.setLayout()第三步:创建一个GridBagConstraints对象,即约束对象; GridBagConstraints的构造是没有参数的,这就意味着在创建对象之后,我们通常要对对象的属性进行设置,这里的属性即是约束条件。 GridBagConstraintsgbc=newGridBagConstraints() 第四步:初始化约束设置; 在多个组件的情况下,每个组件有不同的约束,我们可以重用GridBagConstraints对象,能够给GridBagConstraints属性分配下列值:anchor,fill,gridwidth,gridheight,gridx,gridy,weightx,weighty, insets,ipadx,ipady。 Anchor该约束只适用于不充满整个单元格的组件,即构件比它的显示区域小的情况,它告诉JAVA,将组件放在单元格的什么地方,该约束的有效值包括CENTER(水平和垂直居中)、NORTH(放置构件在容器北部)、NORTHEAST(放置构件在容器东北部)、EAST(放置构件在容器东部)、SOUTHEAST(放置构件在容器东南部)、SOUTH(放置构件在容器南部)、SOUTHWEST(放置构件在容器西南部)、WEST(放置构件在容器西部)、NORTHWEST(放置构件在容器西北部),默认为CENTER。设置方法: gbc.anchor=GridBagConstraints.CENTER fill用于构件的显示区域比构件的要求区域大以决定是否(并且如何)调整构件的尺寸,它的可能取值有四个:BOTH(沿两个方向伸展,以添满单元格)、NONE(以最小尺寸显示组件)、HORIZONTAL(水平填补显示区域,不改变高度)、VERTICAL(垂直填补显示区域,不改变宽度)。默认为NONE。设置方法: gbc.fill=GridBagConstraints.BOTH gridwidth,gridheight它们规定构件在显示区域跨越的单元格列数(gridwidth)或行数(gridheight),缺省值是1。有效值可以是:REMAINDER(规定构件将是行gridwidth或列gridheight里的最后 收稿日期:2006-02-15 作者简介:杨怀义(1965-),男,四川通江人,讲师,主要研究方向:计算机图形处理、程序设计教学。 利用相对坐标轻松完成网格袋布局 杨怀义 (南充职业技术学院,四川南充637000) 摘要:网格袋布局管理器是java布局中最有用、最灵活、最复杂、最难掌握的一种布局管理器,实际上,如果我们明白了在布局时它利用了单元格相对坐标定位这一点,以及各个约束条件在布局中的作用,网格袋布局也会变得很轻松。 关键词:java;程序设计;布局管理;网格袋布局器中图分类号:TP312文献标识码:A文章编号:1009-3044(2006)14-0076-02 CompleteEasilyGridbaglayoutbyUsingRelativeCoordinate YANGHuai-yi (NanChongProfessionalTechnicCollege,Nanchong637000,China) Abstracts:Gridbaglayoutadministeringmachineisonethatcisthemostuseful,complexanddifficulttomaster.Infact,ifweunderstandthatitlocatesbymeansofunitblankrelativecoodinateinlayoutingandthefunctionofeachlimitedconditioninlayouting,wecaneasilylayoutthegridbag. Keywords:java;programming;layoutmanagement;gridbaglayoutadministering machine 76 电脑知识与技术 网络通讯与安全 一个);RELATIVE(规定构件将是行gridwidth或列gridheight里的下一个。设置方法: gbc.gridwidth=GridBagConstraints.REMAINDER gridx,gridy这些属性是组件所在单元格的坐标,当组件跨越 了多个单元格,则该组件的坐标应为左上角单元格的坐标。第一个单元格的坐标选取将决定其他单元格坐标值的选取,这里将用到我们前面介绍的相对坐标的概念,一般情况最左边的的列地址gridx=0,最上边的单元格的地址gridy=0。设置方法: gbc.gridx=0;gbc.gridy=0 weightx,weighty该属性确定了是否要将组件水平拉伸(weightx)或垂直拉伸(weighty)填充applet的显示区域。缺省值为0,表示两者都拉伸。设置方法: gbc.weightx=0gbc.weighty=0 ipadx,ipady它们规定了面板内组件间的间距大小,构件的宽度将是它的最小宽度加上ipadx*2像素(填充应用到构件的两边, 即在组件的两边加入空白)。同样,构件的高度将是他的最小高度 加上ipady*2像素(即在组件的上下加入空白)。 默认情况下,组件周围都没有空白。 Insets决定面板周围的空白大小。缺省值是insets(0,0,0,0),表示在上下左右每个构件没有空白。 第五步:对要添加的控件进行约束; 语法为:网格袋对象.setConstraints(控件名称,约束对象名称),如: gbl.setConstraints(labelName,gbc); 第六步:添加控件。 语法:panel.add(控件名称),如: panel.add(labelName); 对你要添加的每一个控件重复第四、第五、第六步。2.3实例图一效果代码//图1效果源代码 //本例在WindowsXP及j2sdk1.4.2-10下调试通过 importjava.awt.*;importjavax.swing.*;importjava.awt.event.*; publicclassApplicantextendsJApplet{JPanelpanel;//标签变量JLabellabelAppID;JLabellabelAppName;JLabellabelAppAddress;//数据输入项控件变量JTextFieldtextAppID;JTextFieldtextAppName;JTextFieldtextAppAddress;JButtonbutton1;JButtonbutton2;//布局变量GridBagLayoutgl; GridBagConstraintsgbc;publicvoidinit(){//初始化布局变量gl=newGridBagLayout(); gbc=newGridBagConstraints();panel=(JPanel)getContentPane();panel.setLayout(gl);//创建并添加相应控件初始化标签labelAppID=newJLabel("客户卡号");labelAppName=newJLabel("姓名");labelAppAddress=newJLabel("地址");button1=newJButton("确定"); button2=newJButton("取消"); //初始化文本框textAppID=newJTextField(10);textAppName=newJTextField(15);textAppAddress=newJTextField(20);//为Applicantid添加控件gbc.gridx=0;gbc.gridy=0; gbc.anchor=GridBagConstraints.CENTER;gbc.fill=GridBagConstraints.NONE; gl.setConstraints(labelAppID,gbc);panel.add(labelAppID);gbc.gridx=1;gbc.gridy=0; gbc.anchor=GridBagConstraints.NORTHWEST;gl.setConstraints(textAppID,gbc);panel.add(textAppID); //为Applicantname添加控件gbc.gridx=0;gbc.gridy=1; gbc.anchor=GridBagConstraints.WEST;gl.setConstraints(labelAppName,gbc);panel.add(labelAppName);gbc.gridx=1;gbc.gridy=1; gbc.anchor=GridBagConstraints.NORTHWEST;gl.setConstraints(textAppName,gbc);panel.add(textAppName); //为Applicantaddress添加控件gbc.gridx=0;gbc.gridy=2; gbc.anchor=GridBagConstraints.EAST;gl.setConstraints(labelAppAddress,gbc);panel.add(labelAppAddress);gbc.gridx=1;gbc.gridy=2; gl.setConstraints(textAppAddress,gbc);panel.add(textAppAddress);//为按钮添加控件gbc.gridx=1;gbc.gridy=4; gbc.anchor=GridBagConstraints.CENTER;gl.setConstraints(button1,gbc);panel.add(button1);gbc.gridx=2;gbc.gridy=4; gl.setConstraints(button2,gbc);panel.add(button2);}} 上例没有对每一个约束都进行设置,读者可以在此基础上做一些修改,或修改有关参数值或添加一些约束,多调试几次,多观察,相信你一定会对网格袋布局管理器的使用有所收获,明白了其中的原理,网格袋布局不是很难。 参考文献: [1]RogersCadenhead,LauralLemay.陈武,袁国忠,译.21天学通JAVA2[M].北京:人民邮电出版社,2004. [2]程桓松,周晓军,陈星.JAVA程序设计渐进教程[M].成都:电子科技大学出版社,2005. [3]李诚等编著.JAVA2简明教程[M].北京:清华大学出版社,2004. 77 本文来源:https://www.wddqw.com/doc/721429237a563c1ec5da50e2524de518964bd388.html