JAVA布局模式:GridBagConstraints终极技巧参数详解「建议收藏」

JAVA布局模式:GridBagConstraints终极技巧参数详解「建议收藏」布局模式:GridBagConstraints布局,先发一个实例:gridx=2;//X2gridy=0;//Y0gridwidth=1;//横占一个单元格gridheight=1;//列占一个单元格weightx=0.0;//当窗口放大时,长度不变weighty=0.0;//当窗口放大时,高度不变anchor=Gr

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
布局模式 :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。精细调整完成,运行调试






JAVA布局模式:GridBagConstraints终极技巧参数详解「建议收藏」

以下是GridBagLayout的详解:

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

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

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

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

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

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

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

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

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

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


JAVA布局模式:GridBagConstraints终极技巧参数详解「建议收藏」


图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:



JAVA布局模式:GridBagConstraints终极技巧参数详解「建议收藏」




图14.9参数的设定顺序

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

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

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

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

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

起。

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

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

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

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

平台之梦。

    小结:

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

程效果。

这一章里新学习的类有:

BorderLayout,CardLayout,FlowLayout,GridLayot

,ridBagLayout,GridBagConstraints和Insets。

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

的外观管理器。

类GridBagLayout需要通过类GridBagconstraints

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195568.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 于Linux-2.6.32内核上编译ipset-6.23的坎坷经历[通俗易懂]

    于Linux-2.6.32内核上编译ipset-6.23的坎坷经历[通俗易懂]新版本的ipset上周在儿童医院给小小看病等待叫号的间隙,收到了Netfilter邮件列表的推送消息,一览了ipset最新的6.23版本的新特性,很多正是我目前所需要的,特别是timeout和skbinfo参数的支持,具体的详情请自行查看manual,如果不想看那么多,我这里简单的贴一下:  timeout      All set types supportstheoptional

    2022年9月1日
    2
  • php getrealpath,PHP SplFileInfo getRealPath()用法及代码示例「建议收藏」

    php getrealpath,PHP SplFileInfo getRealPath()用法及代码示例「建议收藏」SplFileInfo::getRealPath()函数是PHP中的标准PHP库(SPL)的内置函数,用于获取绝对文件路径。用法:intSplFileInfo::getRealPath(void)参数:该函数不接受任何参数。返回值:成功时,此函数返回文件的路径。以下示例程序旨在说明PHP中的SplFileInfo::getRealPath()函数:程序1://PHPProgramto…

    2022年9月19日
    2
  • 中文转拼音【真正的完整版】 拼音 驼峰命名专用

    中文转拼音【真正的完整版】 拼音 驼峰命名专用把下面的代码复制了,在桌面建一个后缀为“.html”格式的文件,如:“拼音.html”,打开 拼音.html,Ctrl+V,Ctrl+S,关闭,再打开<!DOCTYPEhtml><htmllang="cn"><head><metacharset="UTF-8"><title&gt

    2022年6月21日
    23
  • bs与cs的区别简述_cs客户端和bs客户端

    bs与cs的区别简述_cs客户端和bs客户端荐java适合开发bs结构,cs不是它的强项.C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或Internet…

    2022年10月16日
    2
  • python收集数据做主神_里纲_[综漫]收集数据做主神小说无防盗章节_作者忘却的悠_新书包网(www.51aslz.com)…[通俗易懂]

    python收集数据做主神_里纲_[综漫]收集数据做主神小说无防盗章节_作者忘却的悠_新书包网(www.51aslz.com)…[通俗易懂]“里包恩怎么了?”“没什么,只是在想,你做为里包恩的学生,能不能帮我个忙?”“帮忙?”纲不好意思的抓了抓头发,所有的心思都写在了脸上。什么我这么废柴能帮什么忙,虽然我很想帮忙,但是我真的什么都做不好。找里包恩本人更快吧,实在不行还有山本和狱寺他们。不过……库洛洛先生是黑手党吧?黑手党的事情,我们几个小孩子能帮什么忙呢?果然还是找里包恩比较好。能把心思在脸上表达的这么明明白白,你也算…

    2022年4月19日
    48
  • 小米 token(token在哪里获取)

    近两年,物联网及其相关技术迅猛发展,各样的智能设备渐渐的走进了我们的生活,随之使用者们也变的越来越向往智能化的生活。但目前的智能家居市场产品分散,单一厂商很难完全满足用户需求,并且多个厂商产品不能原生联动,这可能也是家居智能化面临的问题。本文主要介绍小米设备拿token以及局域网控制,以及一款开源的智能家居平台HomeAssistant部署与使用,让家庭中的多种智能设备联动变成一种可能。

    2022年4月14日
    1.3K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号