gridx = 2; // X2

gridy = 0; // Y0

gridwidth = 1; // 横占一个单元格

gridheight = 1; // 列占一个单元格

weightx = 0.0; // 当窗口放大时,长度不变

weighty = 0.0; // 当窗口放大时,高度不变

anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部

fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间

insert = new Insets(a,b,c,d); // 组件彼此的间距(a 是往下来,b 是往左来,c 是往上来,d 是往右来)

ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间

ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间

new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insert, ipadx, ipady);

GridBagLayout之变态玩法:

很多人抱怨GridBagLayout没有XYLayout布局灵活,但是做为一个专业程 序,所有组件必须随着窗口大小改变而改变。其次,当仅仅简单使用XYLayout时,需要包含一个大库,对于一些场合这些多余的类超出了可接受范围(例如 Applet应用)

拿一个比较简单的界面来作介绍

1。首先建立一个JFrame,设定它的Layout为XYLayout

2。在其上堆上控件,对齐好位置,否则转换时会有较大调整

3。完成创建控件后,设置Layout为GridBagLayout,这时所有控件基本保持 原位,待下一步做精细调整

4。选择一个控件,点击右边属性栏的"constraints" 对应的调整按钮,弹出最重要的属性调整界面

5。将所有边界和空白去掉,同时Grid大小也暂时去掉,因为这些边距会影响我们的调整

6。设置需要扩展的行和列

7。粗轮廓完成后,可以设置组件边距进行精细调整了

8。精细调整完成,运行调试

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

java.awt.GridBagConstraints

gridBagConstraints = new java.awt.GridBagConstraints();

gridBagConstraints.gridx = 0;              //单元格横坐标

gridBagConstraints.gridy = 0;              //单元格纵坐标

//填充(相对与其他单元格),用方位(东,南,西,北,东南,东北。。。)填靠,

如果是东就往东靠

gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;

gridBagConstraints.gridwidth

//填充(相对与其他单元格),只有横向和纵向全填。

gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;

//填充(相对与整个空白区域),横向全部填满。

gridBagConstraints.weightx = 1.0;

//填充(相对与整个空白区域),纵向全部填满。

gridBagConstraints.weighty = 1.0;

//控件四周的空间(上,左,下,右)

gridBagConstraints.insets = new java.awt.Insets(10, 6, 0, 0);

//指定组件在显示区域的一行中所占的单元格数。

gridBagConstraints.gridwidth

//指定组件在显示区域的一列中所占的单元格数。

gridBagConstraints.gridheight

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

public class GridBagConstraints

extends Object

implements Cloneable, Serializable

GridBagConstraints 类指明了对使用 GridBagLayout 类进行布局的组件的限制。

出现于:

JDK1.0

参见:

GridBagLayout

--------------------------------------------------------------------------------

变量索引

anchor

当组件小于它的显示区域时该域被使用。

BOTH

在水平方向和垂直方向上同时改变组件的大小。

CENTER

将组件置于它的显示区域的中部。

EAST

将组件置于它的显示区域的右部,并且垂直方向上居中。

fill

当组件的显示区域大于它所请求显示区域的尺寸时调用该域。

gridheight

在组件显示区域的一列上指定单元格的数目。

gridwidth

在组件显示区域的一行上指定单元格的数目。

gridx

在组件显示区域的左部指定一个单元格,其中最左边的单元格为 gridx = 0 。

gridy

在组件显示区域的顶部指定一个单元格,其中最上边的单元格为 gridy = 0 。

HORIZONTAL

在水平方向而不是垂直方向上改变组件的大小。

insets

该域指定组件的外部补空,即在组件和它的显示区域边沿之间间距的最小量。

ipadx

该域指定组件的内部补空,即给组件的最小宽度添加多大的间距。

ipady

该域指定组件的内部补空,即给组件的最小高度添加多大的间距。

NONE

不改变组件的大小。

NORTH

将组件置于它的显示区域的顶部,并且水平方向上居中。

NORTHEAST

将组件置于它的显示区域的右上角。

NORTHWEST

将组件置于它的显示区域的左上角。

RELATIVE

指定该组件为接着上一个组件的组件,它的列或行的值为 (gridwidth , gridheight) ,或者该组件被放在上一个被添加组件的旁边 (gridx , gridy) 。

REMAINDER

指定该组件是在该列或行上的最后一个组件。

SOUTH

将组件置于它的显示区域的底部,并且水平方向上居中。

SOUTHEAST

将组件置于它的显示区域的右下角。

SOUTHWEST

将组件置于它的显示区域的左下角。

VERTICAL

在垂直方向而不是水平方向上改变组件的大小。

weightx

指定如何分布额外的水平空间。

weighty

指定如何分布附加的垂直空间。

WEST

将组件置于它的显示区域的左部,并且垂直方向上居中。

--------------------------------------------------------------------------------

构造子索引

GridBagConstraints()

创建一个 GridBagConstraint 对象,它的所有域都设置为它们的缺省值。

--------------------------------------------------------------------------------

方法索引

clone()

创建该网格包约束的一个副本。

--------------------------------------------------------------------------------

变量

RELATIVE

public static final int RELATIVE

指定该组件为接着上一个组件的组件,它的列或行的值为 (gridwidth , gridheight) ,或者该组件被放在上一个被添加组件的旁边 (gridx , gridy) 。

参见:

gridwidth, gridheight, gridx, gridy

REMAINDER

public static final int REMAINDER

指定该组件是在该列或行上的最后一个组件。

NONE

public static final int NONE

不改变组件的大小。

BOTH

public static final int BOTH

在水平方向和垂直方向上同时改变组件的大小。

HORIZONTAL

public static final int HORIZONTAL

在水平方向而不是垂直方向上改变组件的大小。

VERTICAL

public static final int VERTICAL

在垂直方向而不是水平方向上改变组件的大小。

CENTER

public static final int CENTER

将组件置于它的显示区域的中部。

NORTH

public static final int NORTH

将组件置于它的显示区域的顶部,并且水平方向上居中。

NORTHEAST

public static final int NORTHEAST

将组件置于它的显示区域的右上角。

EAST

public static final int EAST

将组件置于它的显示区域的右部,并且垂直方向上居中。

SOUTHEAST

public static final int SOUTHEAST

将组件置于它的显示区域的右下角。

SOUTH

public static final int SOUTH

将组件置于它的显示区域的底部,并且水平方向上居中。

SOUTHWEST

public static final int SOUTHWEST

将组件置于它的显示区域的左下角。

WEST

public static final int WEST

将组件置于它的显示区域的左部,并且垂直方向上居中。

NORTHWEST

public static final int NORTHWEST

将组件置于它的显示区域的左上角。

gridx

public int gridx

在组件显示区域的左部指定一个单元格,其中最左边的单元格为 gridx = 0 。该 RELATIVE 值指定了该组件将被放置在该组件被添加之前添加到容器中的组件的右边。

缺省值为 RELATIVE 。

参见:

gridy

gridy

public int gridy

在组件显示区域的顶部指定一个单元格,其中最上边的单元格为 gridy = 0 。该 RELATIVE 值指定了该组件将被放置在该组件被添加之前添加到容器中的组件的下边。

缺省值为 RELATIVE 。

参见:

gridx

gridwidth

public int gridwidth

在组件显示区域的一行上指定单元格的数目。

使用 REMAINDER 来指定该组件为它所在行的最后一个。使用 RELATIVE 来指定该组件为它所在行的倒数第二个。

缺省值为 1 。

参见:

gridheight

gridheight

public int gridheight

在组件显示区域的一列上指定单元格的数目。

使用 REMAINDER 来指定该组件为它所在列的最后一个。使用 RELATIVE 来指定该组件为它所在列的倒数第二个。

缺省值为 1 。

参见:

gridwidth

weightx

public double weightx

指定如何分布额外的水平空间。

网格元包布局管理器计算出在一列中所有组件中最大的 weighty 作为该列的权值。如果结果布局在水平方向上比需要填充的区域小,那么额外的空间会按照它的权值的比例分布到每一列。权值为零的列不会有额外的空间。

如果所有的权值都为零,那么所有的额外空间出现在网格单元和左右边沿之间。

该域的缺省值为 0 。

参见:

weighty

weighty

public double weighty

指定如何分布附加的垂直空间。

网格元包布局管理器计算出在一行中所有组件中最大的 weightx 作为该行的权值。如果结果布局在垂直方向上比需要填充的区域小,那么额外的空间会按照它的权值的比例分布到每一行。权值为零的行不会有额外的空间。

如果所有的权值都为零,那么所有的额外空间出现在网格单元和上下边沿之间。

该域的缺省值为 0 。

参见:

weightx

anchor

public int anchor

当组件小于它的显示区域时该域被使用。它确定了在显示区域中放置组件的位置。可能值有 CENTER , NORTH ,NORTHEAST ,EAST , SOUTHEAST ,SOUTH ,SOUTHWEST , WEST ,和 NORTHWEST 。 缺省值为 CENTER 。

fill

public int fill

当组件的显示区域大于它所请求显示区域的尺寸时调用该域。它确定是否改变组件的大小,并且如 果要改变,须怎样改变。

下列值适用于 fill :

NONE :不改变组件的大小。

HORIZONTAL :使组件在水平方向上足够宽来填充它的显示区域, 但是不改变它的高度。

VERTICAL :使组件在垂直方向上足够高来填充它的显示区域, 但是不改变它的宽度。

BOTH :使组件完全填充它的显示区域。

缺省值为 NONE 。

insets

public Insets insets

该域指定组件的外部补空,即在组件和它的显示区域边沿之间间距的最小量。

缺省值为 new Insets(0, 0, 0, 0) 。

ipadx

public int ipadx

该域指定组件的内部补空,即给组件的最小宽度添加多大的间距。 组件的宽度至少为它的最小宽度加上 (ipadx * 2) 个像素。

缺省值为 0 。

参见:

ipady

ipady

public int ipady

该域指定组件的内部补空,即给组件的最小高度添加多大的间距。 组件的高度至少为它的最小高度加上 (ipady * 2) 个像素。

缺省值为 0 。

参见:

ipadx

--------------------------------------------------------------------------------

构造子

GridBagConstraints

public GridBagConstraints()

创建一个 GridBagConstraint 对象,它的所有域都设置为它们的缺省值。

--------------------------------------------------------------------------------

方法

clone

public Object clone()

创建该网格包约束的一个副本。

返回值:

该网格包约束的一个副本

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

以下是GridBagLayout的详解:

虽说GridBagLayout和GridLayout只有一点差别,它

的作用却是出奇的大。这是因为GridBagLayout一改其他的外观管理器的死板

模样,具有很多的灵活性。它不再像其他的外观管理器那样,使得各个组件

的大小都一样。 GridBagLayout通过类GridBagConstraints的帮助,按照

设计的意图,改变组件的大小,把它们摆在设计者希望摆放的位置上。

在GridBagLayout中,每个组件都有一个GridBagConstraints

对象来给出它的大小和摆放位置。我们在使用GridBagLayout的时候,最重

要的就是学会使用这个类GridBagConstraints的使用方法,学会如何设置组

件的大小、位置等限制条件。

我们先看一个用GridBagLayout外观管理器生成的窗口

图14.8程序14.5的执行结果

这个窗口里面的几个按钮有的大、有的小,其大小、位

置均不同,没有一定的规律可循,这即是发挥了GridBagLayout外观管理器

的灵活性。生成此窗口的程序为:

程序14.5

  importjava.awt.*;

      //输入所有的java.awt 类

   publicclasswindow7extendsjava.applet.Applet

  {

   publicvoidinit() {

    resize(300,100);//设置窗口的大小

    GridBagConstraintsgbc=new GridBagConstraints(

);//使用类GridBagConstriants

    setLayout(newGridBagLayout());//设定外观

管理器为 GridBagLayout外观管理器

    gbc.fill =GridBagConstraints.BOTH;//★

所有的按钮都会把分配的剩余空间填满

    gbc.gridwidth=1;//★设置第一个按钮的大

    gbc.gridheight=1;// ★

    ButtonButton1=newButton("东 ");

    ((GridBagLayout)getLayout( )).setConstraints(Button1,gbc);

     add(Button1);

    gbc.gridwidth= GridBagConstraints.REMAINDER;

//★第二个按钮填满整行空间

    ButtonButton2=newButton("西 ");

    ((GridBagLayout)getLayout( )).setConstraints(Button2,gbc);

     add(Button2);

    gbc.gridheight=4;//设置第三个按钮的大

    gbc.gridwidth= 1;

    ButtonButton3=newButton("南 ");

    ((GridBagLayout)getLayout( )).setConstraints(Button3,gbc);

     add(Button3);

    gbc.gridheight=2;//设置第四个按钮的大

    gbc.gridwidth= 2;//GridBagConstraints.REMAINDER;

     ButtonButton4=newButton("北");

     ((GridBagLayout)getLayout( )).setConstraints(Button4,gbc);

     add(Button4);

    gbc.gridwidth= GridBagConstraints.REMAINDER;

    Button Button5=newButton("中");

     ((GridBagLayout)getLayout( )).setConstraints(Button5,gbc);

     add(Button5);

    gbc.insets=new Insets(5,6,7,8);//★设置第五个按钮的位置

    ButtonButton6=newButton("好酒在张弓");

    ((GridBagLayout)getLayout( )).setConstraints(Button6,gbc);

     add(Button6);

           }

  }

  ★注释:程序14.5里面有星号的语句都将做详细的解释

下面就详细地解释一下程序14.5,通过对这个小程序的分析可以从中了解 GridBagLayout外观管理器的工作原理和工作方法。

  GridBagLayout外观管理器实际上是根据类 GridBagConstraints所给

出的条件限制以及组件本身的一向特性条件(例如每个组件程序允许的最小

尺寸),来决定各个组件的外观的。

让我们把程序14.5之中出现的新鲜的语句一条一条地看个明白吧:

1.gbc.fill=GridBagConstraints.BOTH;

每个组件有一定的原始大小,例如在类FlowLayout外

观管理器的管理之下显示的就都是组件的本身原始大小。如果我们分配给一

个组件的空间比它原本所需要的空间大时,就需要一定的方式方法来决定如

何处理这一部分多余的空间。这时就用到了fill值。Java根据人们给这个

fill设定的值来决定如何处理比组件原始空间大的那部分空间。

fill可以取四种不同的值,它们分别代表了四种不同

的剩余空间处理方式:

GridBagConstraints.NONE

  不必理睬剩余空间的存在,让它空着好了。

GridBagConstraints.BOTH

  不让一点剩余空间存在,改变组件的大小,让它填

满分配给它的整个空间。

GridBagConstraints.HORIZONTAL

  调整组件的大小,把水平方向的空间填满。

GridBagConstraints.VERTICAL

  调整组件的大小,把垂直方向的空间填满,让水平

方向的空间空着吧。

2.gbc.gridwidth=1;和 gbc.gridheight=1;

这两句话像是一对孪生兄弟,应该同时给以同样的重视

。它们一个负责组件的水平宽度(gridwidth),一个负责组件的垂直高度

(gridheight )。由此我们可以知道,组件的大小是可以变化的。

组件的形状是不能改变的,永远是矩形的。

  好了,这两条语句的意义很简单,就讲到这里吧。

  喂!等一等,我看到下面有一条语句是:

    gbc.gridwidth= GridBagConstraints.REMAINDER;

这是什么意思?

怎么gridwidth的值不是一个数,而是“ GridBagConstraints.REMAINDER

”?

原来,这是Java精心为大家设计的一个特别有用的变

量,使用它就可以通知外观管理器让组件占据本行的所有剩余空间,而不必

去计算宽度值是多少,很自动化。

3.gbc.insets=newInsets(5,6,7,8);

这条语句里面提到了两个拼写几乎完全相同的词:insets

和 Insets,虽然只相差一个字母:一个是大写I,一个是小写i,但是它

们代表的意义可大不相同。

Insets是AWT里面一个类的名字,代表着类Insets,它的用途是用来定义组件容器 周围的空间大小,其中带有四个参数:

Insets(第一个参数,第二个参数,第三个参数,第

四个参数 )

第一个参数代表距上面有几个点的空白,第二个参数代

表距左边有几个点的空白,第三个参数代表距下边有几个点的空白区域,第

四个参数代表距右边留几个点的空白区域。

  形象一点的表示如图 14.9:

图14.9参数的设定顺序

insets是类GridBagConstraints的一个限定条件。

insets和Insets既然起的名字相同,两者之间也一

定有相同之处,它们的相似之处就在于它们的用法和用途。insets用来设置

一个组件和其他的组件之间的距离的。所以在上面程序里的按钮和其他的按

钮不同,它和其他的按钮之间都有一定的距离,而不是和其他的按钮挨在一

起。

总之,使用外观管理器给我们带来了许多的方便之处,

使得我们可以轻轻松松地完成各种窗口的外观处理工作。

使用外观管理器除了使得程序设计变得方便以外,还

使得程序变得容易在各种不同的窗口环境下运行,从而协助实现了Java的多

平台之梦。

    小结:

学会使用各种各样的外观管理器会带来事半功倍的编

程效果。

这一章里新学习的类有:

BorderLayout,CardLayout,FlowLayout,GridLayot

,ridBagLayout,GridBagConstraints和Insets。

类GridBagLayout生成的外观管理器是最具有灵活性

的外观管理器。

类GridBagLayout需要通过类GridBagconstraints

来实现对程序窗口外观的管理。

原文地址:http://blog.163.com/daixihu_2008/blog/static/9419486620095268561250/

 

[转]java gridbag 说明的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. JAVA的面向对象编程--------课堂笔记

    面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...

  3. Java基础之创建窗口——使用GridBagLayout管理器(TryGridBagLayout)

    控制台程序. java.awt.GridBagLayout管理器比前面介绍的其他布局管理器灵活得多,因此使用起来也比较复杂.基本机制就是在随意的矩形网格中布局组件,但网格的行和列不一定拥有相同的高度和 ...

  4. java中的xpath,读取xml文档。

    1,入门 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 X ...

  5. Java学习笔记(一)网格袋布局

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

  6. 201771010126 王燕《面向对象程序设计(Java)》第十四周学习总结(测试程序11)

    实验十四  Swing图形界面组件 理论部分: 不使用布局管理器 有时候可能不想使用任何布局管理器,而只 是想把组件放在一个固定的位置上.下面是将一 个组件定位到某个绝对定位的步骤: 1)将布局管理器 ...

  7. 马昕璐 201771010118《面向对象程序设计(java)》第十四周学习总结

    第一部分:理论知识学习部分 一.Swing和MVC设计模式 1. MVC模式可应用于Java的GUI组件设计中 2.MVC模式GUI组件设计的唯一的模式,还有很多设计的模式 二.布局管理器 1. 布局 ...

  8. 王之泰201771010131《面向对象程序设计(java)》第十四周学习总结

    第一部分:理论知识学习部分 第12章 Swing用户界面组件 12.1.Swing和MVC设计模式 a 设计模式初识b 模型—视图—控制器模式c Swing组件的模型—视图—控制器分析 12.2布局管 ...

  9. 刘志梅201771010115.《面向对象程序设计(java)》第十四周学习总结

    实验十四  Swing图形界面组件 实验时间 20178-11-29 1.实验目的与要求 (1)设计模式:反复使用.经过分类编目的.代码设计经验的总结. 在Alexander的模式分类和软件模式的分类 ...

随机推荐

  1. Python Virtualenv 虚拟环境

    在python2和python3共存的机器上做开发,要想互不干扰,虚拟环境很重要. Debian7 默认是python2.7.3,装好python3.4.1后怎么建立虚拟环境呢? $ pyvenv m ...

  2. merge into update

    如果要DML实现真正意义上的并发,在开始执行需要并发语句前,需要执行开启session并发  ALTER SESSION ENABLE PARALLEL DML;  在执行完语句后,需要执行关闭ses ...

  3. Angular 2.0 从0到1:Rx--隐藏在Angular 2.x中利剑

    第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ...

  4. ZooKeeper(3.4.5) - 原生 API 的简单示例

    一.创建会话 1. 创建一个基本的ZooKeeper会话实例 package com.huey.dream.demo; import java.util.concurrent.CountDownLat ...

  5. jquery、js全选反选checkbox

    操作checkbox,全选反选 //全选 function checkAll() { $('input[name="TheID"]').attr("checked&quo ...

  6. Quartz 第三课 More About Jobs & JobDetails(官方文档翻译)

    当学完第二课之后,你欣喜的发现,让jobs工作起来是还是相当简单的.虽然让jobs运行起来很简单,对于其执行的关键内容还是需要知道的.它们是IJob接口中的Execute和JobDetails. 当你 ...

  7. C#——字符操作

    题目要求:用户随机输入字母及数字组成的字符串,当用户连续输入字符串‘hello’时,程序结束用户输入,并分别显示用户输入的字母及数字的数目. 代码: using System; using Syste ...

  8. JavaScript高级程序开发3笔记

      Js对象 注意:js基本数据类型不是对象,但是"abc".match()这种,可以调用对象的方法,是因为调用方法是临时产生了一个wrapper的包装对象,this指向它: Js ...

  9. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发

    Fiddler是Windows底下最强大的请求代理调试工具,监控任何浏览器的HTTP/HTTPS流量,窜改客户端请求和服务器响应,解密HTTPS Web会话,图4.44为Fiddler原理示意图. 图 ...

  10. sqlplus 可以登录 plsql 不能登录

    最开始我以为是system用户被锁定了,但是解锁后仍然不可以登录.大神指导之后可以了,说是缺少监听器,解决过程如下: 1.将“tnsnames.ora”和“listener.ora”两个文件里的“lo ...