布局模式 :GridBagConstraints布局,先发一个实例:
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(0, 0, 0, 0);  // 组件彼此的间距
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。精细调整完成,运行调试

以下是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布局模式:GridBagConstraints相关推荐

  1. java 布局强制转换_[转]JAVA布局模式:GridBagConstraints终极技巧

    最近正在 修改<公交线路查询系统>,做系统的时候都是用NULL布局,由于NULL布局调用windows系统的API,所以生成的程序无法在其他平台上应用,而 且如果控件的数量很多,管理起来也 ...

  2. JAVA布局模式:GridBagConstraints终极技巧

    GridBagConstraints布局,先发一个实例: gridx = 2; // X2 gridy = 0; // Y0 gridwidth = 1; // 横占一个单元格 gridheight ...

  3. Java布局管理器详解

    很多初学[Java教程]的小伙伴对Java布局管理器不是很了解,下面小编就来给大家进行详细介绍. 边框布局管理器 BorderLayout(边框布局管理器)是 Window.JFrame 和 JDia ...

  4. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  5. 《JAVA与模式》之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  6. 《JAVA与模式》之命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 在阎宏博士的<JAVA与模式>一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式.命令 ...

  7. [转]《JAVA与模式》之责任链模式

    http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样描述责 ...

  8. 《JAVA与模式》之适配器模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能 ...

  9. 《JAVA与模式》之访问者模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...

最新文章

  1. 复习PHP-语言参考-类型
  2. Luogu3375 【模板】KMP字符串匹配
  3. Python语言学习之字母S开头函数使用集锦:set/sys/super用法之详细攻略
  4. 推荐 | 8 个 SpringBoot 精选项目
  5. 使用docker镜像搭建svn+Apache环境
  6. 牛客练习赛 58——树链剖分
  7. mysql字段简索引_3万字总结,Mysql优化之精髓
  8. 我用Python抓取了【S11全球总决赛】直播评论,EDG nb
  9. python 爬网站 实例_python爬虫实战:之爬取京东商城实例教程!(含源代码)
  10. python之集合操作 - |
  11. 计算机/程序员常用英语(持续添加,包括一些简写)
  12. 生于凛冬的私募资产配置基金管理人能否秽土转生?
  13. 利用css实现返回顶部按钮
  14. android checkboxpreference属性,Android CheckBoxPreference Default Value
  15. 模拟京东快递单号查询框
  16. 制作ZedBoard-linaro-desktop-ubuntu全过程之运行linaro系统
  17. python获取手机号码归属地_基于Python的免费手机号码归属地查询
  18. 简单明了理解交叉验证
  19. 留个底 人人乐旁靓房房东出租,我是房东
  20. 支付宝php40247,支付宝APP支付 显示 系统繁忙 请稍后再试 ALI40247

热门文章

  1. 人脸识别活体检测之张张嘴和眨眨眼——Json_Parsing
  2. 冬天膝盖发凉是怎么回事?
  3. 【flask】 搭建图片服务器以便浏览器查看
  4. C++ int 转 char
  5. A glimpse of Support Vector Machine
  6. ifstream seekg( ) read( )文本操作
  7. Git之Git连接GitHub上的远程仓库
  8. 【excel技巧】关于单元格的锁定
  9. 手机屏幕 高宽有哪些_手机新屏幕比18:9高宽到底好在哪里
  10. 小型办公室出租,丰富性和多样性