文档章节

利用相对坐标轻松完成网格袋布局

lench
 lench
发布于 2015/09/26 17:24
字数 2347
阅读 27
收藏 0

注:本篇博文引至南充技术学院杨怀义先生的一篇论文。论文内容如下。

引:

利用相对坐标轻松完成网格袋布局

杨怀义

( 南充职业技术学院, 四川 南充 637000)

摘要: 网格袋布局管理器是 java 布局中最有用、最灵活、最复杂、最难掌握的一种布局管理器, 实际上, 如果我们明白了在布局时它利 用了单元格相对坐标定位这一点, 以及各个约束条件在布局中的作用, 网格袋布局也会变得很轻松。

关键词: java; 程序设计; 布局管理; 网格袋布局器

中图分类号: TP312 文献标识码: A 文章编号: 1009- 3044(2006)14- 0076- 02

Complete Easily Gridbaglayout by Using Relative Coordinate YANG Huai- yi

(NanChong Professional Technic College,Nanchong 637000,China)

Abstracts:Gridbaglayout administering machine is one thatc is the most useful,complex and difficult to master.In fact,if we understand that it locates by means of unit blank relative coodinate in layouting and the function of each limited condition in layouting,we can easily layout the gridbag.

Key words:java;programming;layout management;gridbaglayout administering machine

凡是学习过 JAVA 的人都知道, JAVA 中学习起来最困难、最 容易引起混淆的就是 JAVA 的布局, 尤其是网格袋布局, 由于它 使用了很多约束条件来控制界面, 所以学习的人觉得它很复杂, 也很灵活, 本文将教你利用单元格相对坐标定位轻松搞定网格袋 布局。

1 网格袋布局 要创建网格袋布局, 可以使用 GridBagLayout GridBagConstraintsGridBagLayout 管理器是 AWT 提供的最灵活、 最复杂的布局管理器, 它用于定义要放置到单元格中的每个组件 的属性, 包括布局、大小、对齐方式等。助手类 GridBagConstraints 可以接受几个网格袋约束条件, 网格袋约束条件和每个组件之间 的关系决定了整个布局, 约束条件决定了包含在对象以内的构件 参数的定位。

2 创建网格袋的一般步骤

2.1 利用相对坐标设计网格 在进行创建布局之前, 首先要做到心中有数, 我们要绘制的 用户界面要达到什么样的效果, 即进行网格设计, 最好将各个组 件的位置以单元格的形式绘制在纸上, 每个组件有自己的单元 , 不能将多个组件放到同一个单元格中, 对每个单元格标上坐 ( y,x) , 它们是以单元格为单位, 而非像素为单位, 并且这个坐标 是一个相对坐标, 比如下面图 1 的坐标( 0, 0) 表示是第一个单元 格的坐标, 那么横向的第二个单元格坐标为( 1, 0) ; 如果将第一个 单元格定义为( 2, 2) , 那么横向的第二个单元格坐标为( 3, 2) , 次类推, 因为只要你确定了第一个的位置, 其他单元格就依次相 对改变坐标, 不影响整体布局效果, 这就是相对坐标, 这个坐标在 布局中表现为约束中的 gridy gridx

 

 

2.2 创建网格的步骤

第一步: 创建一个 GridBagLayout 对象; 构造方法不需要任何参数。

GridBagLayout gbl=new GridBagLayout()

 原则上, 这条代码的位置可以比较的随意, 只要你在没有调 gbl 之前创建都是可以的, 一般情况下, 我们在将 pane 添加到 窗口之后写这条代码。

第二步: panel 的布局设置为网格袋; 只需要调用 panel 面板的 setLayout 方法。如 panel.setLayout()

 第三步: 创建一个 GridBagConstraints 对象, 即约束对象; GridBagConstraints 的构造是没有参数的, 这就意味着在创建 对象之后, 我们通常要对对象的属性进行设置, 这里的属性即是 约束条件。 GridBagConstraints gbc=new GridBagConstraints()

第四步: 初始化约束设置; 在多个组件的情况下, 每个组件有不同的约束, 我们可以重 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 里的最后一个) ; 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=0 gbc.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 效果源代码

//本例在 Windows XP j2sdk1.4.2- 10 下调试通过

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Applicant extends JApplet

{

JPanel panel; //标签变量

JLabel labelAppID;

JLabel labelAppName;

JLabel labelAppAddress; //数据输入项控件变量

JTextField textAppID;

JTextField textAppName;

JTextField textAppAddress;

JButton button1;

JButton button2; //布局变量

GridBagLayout gl;

GridBagConstraints gbc;

public void init()

{

 //初始化布局变量

gl=new GridBagLayout();

gbc=new GridBagConstraints();

panel=(JPanel)getContentPane();

panel.setLayout(gl); //创建并添加相应控件初始化标签

labelAppID=new JLabel("客户卡号");

labelAppName=new JLabel("姓名");

labelAppAddress=new JLabel("地址");

button1=new JButton("确定");

button2=new JButton("取消"); //初始化文本框

textAppID=new JTextField(10);

textAppName=new JTextField(15);

textAppAddress=new JTextField(20); // Applicant id 添加控件

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); // Applicant name 添加控件

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); // Applicant address 添加控件

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]Rogers Cadenhead,Laural Lemay.陈武,袁国忠,.21 天学通 JAVA2[M].北京:人民邮电出版社,2004.

[2]程桓松,周晓军,陈星.JAVA 程序设计渐进教程[M].成都: 子科技大学出版社,2005.

[3]李诚等编著.JAVA2 简明教程[M].北京:清华大学出版社, 2004.


<完>

鄙人才疏学浅,不敢妄加评注,敬上。











































© 著作权归作者所有

lench
粉丝 2
博文 5
码字总数 4592
作品 0
长春
私信 提问
Java学习笔记(一)网格袋布局

网格袋布局类似于Win8的Metro布局,用于将组件按大小比例放在不同位置的网格内,各组件的实际大小会随着窗口的改变而改变,但相对位置不变,能够很好的适应屏幕。 通过阅读《21天学通Java》这...

qq570842253
2014/10/01
0
0
Android学习笔记(二) 布局方式的介绍

Android应用的开发的一项内容就是用户界面开发了。Android提供了大量功能丰富的UI组件。Android的界面是由布局和组件协同完成的。 Android所有UI组件都继承了View类,View类有一个重要的子类...

半夏alvin
2014/03/05
684
0
如何使用Flexbox和CSS Grid,实现高效布局

CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想。幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来...

powertoolsteam
2017/09/20
0
0
Android第三十六天

1、LinearLayout(线性布局):将布局所包含的控件在线性方向上依次排列。 <1>android:orientation 指定了排列方向(垂直方向(vertical)、水平方向(horizontal)) <2>android:layout_gravity ...

黄晓磊
2016/07/18
24
0
如何使用Flexbox和CSS Grid,实现高效布局

CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想。幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来...

powertoolsteam
2017/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS盒子模型

一、什么叫框模型 页面元素皆为框(盒子) 定义了元素框处理元素内容,内边距,外边距以及边框的计算方式 二、外边距 围绕在元素边框外的空白距离(元素与元素之间的距离) 语法:margin,定...

wytao1995
今天
4
0
Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部