深入学习GridBagLayoutWord下载.docx

上传人:b****5 文档编号:19829510 上传时间:2023-01-10 格式:DOCX 页数:12 大小:22.50KB
下载 相关 举报
深入学习GridBagLayoutWord下载.docx_第1页
第1页 / 共12页
深入学习GridBagLayoutWord下载.docx_第2页
第2页 / 共12页
深入学习GridBagLayoutWord下载.docx_第3页
第3页 / 共12页
深入学习GridBagLayoutWord下载.docx_第4页
第4页 / 共12页
深入学习GridBagLayoutWord下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

深入学习GridBagLayoutWord下载.docx

《深入学习GridBagLayoutWord下载.docx》由会员分享,可在线阅读,更多相关《深入学习GridBagLayoutWord下载.docx(12页珍藏版)》请在冰豆网上搜索。

深入学习GridBagLayoutWord下载.docx

  你应该能看到在草图里有一些线,这些线是用来把总界面分成若干行和列的,这样你就很清楚每一个组件放置的格子位置。

这就是GridBagLayout里"

格"

的那一部分,而图上的数字就是格的号码。

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

publicclassGridBagWindowextendsJFrame{

privateJButtonsearchBtn;

privateJComboBoxmodeCombo;

privateJLabeltagLbl;

privateJLabeltagModeLbl;

privateJLabelpreviewLbl;

privateJTableresTable;

privateJTextFieldtagTxt;

publicGridBagWindow(){

ContainercontentPane=getContentPane();

GridBagLayoutgridbag=newGridBagLayout();

contentPane.setLayout(gridbag);

GridBagConstraintsc=newGridBagConstraints();

//settingadefaultconstraintvalue

c.fill=GridBagConstraints.HORIZONTAL;

tagLbl=newJLabel("

Tags"

);

c.gridx=0;

//xgridposition

c.gridy=0;

//ygridposition

gridbag.setConstraints(tagLbl,c);

//associatethelabelwithaconstraintobject

contentPane.add(tagLbl);

//addittocontentpane

tagModeLbl=newJLabel("

TagMode"

c.gridy=1;

gridbag.setConstraints(tagModeLbl,c);

contentPane.add(tagModeLbl);

tagTxt=newJTextField("

plinth"

c.gridx=1;

c.gridwidth=2;

gridbag.setConstraints(tagTxt,c);

contentPane.add(tagTxt);

String[]options={"

all"

"

any"

};

modeCombo=newJComboBox(options);

c.gridwidth=1;

gridbag.setConstraints(modeCombo,c);

contentPane.add(modeCombo);

searchBtn=newJButton("

Search"

c.gridy=2;

gridbag.setConstraints(searchBtn,c);

contentPane.add(searchBtn);

resTable=newJTable(5,3);

c.gridy=3;

c.gridwidth=3;

gridbag.setConstraints(resTable,c);

contentPane.add(resTable);

previewLbl=newJLabel("

Previewgoeshere"

c.gridy=4;

gridbag.setConstraints(previewLbl,c);

contentPane.add(previewLbl);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

publicstaticvoidmain(Stringargs[]){

GridBagWindowwindow=newGridBagWindow();

window.setTitle("

GridBagWindow"

window.pack();

window.setVisible(true);

构造方法前的代码都不是很特殊,都是一些相当标准的import和变量定义。

但是进入构造方法后,事情就变得有趣了。

ContainercontentPane=getContentPane();

GridBagLayoutgridbag=newGridBagLayout();

contentPane.setLayout(gridbag);

我们以GridBagWindow的内容面板作为开始来创建一个GridBagLayout对象,准确地说,这个方法与过去我们所创建GridLayout对象和BorderLayout对象的方法是一样的。

那么,现在我们就开始来设置GridBagLayout对象使它作为内容面板的布局。

GridBagConstraintsc=newGridBagConstraints();

然后我要提到这整个进程中的一个独特的对象,那就是GridBagConstraints。

这个对象在GridBagLayout中控制所有被安置在其中组件的约束。

为了把一个组件增加到你的GridBagLayout中去,你首先必须将它与一个GridBagConstraints对象建立连接。

GridBagConstraints可以从11个方面来进行控制和操纵,也可以给你提供一些帮助。

这些内容是:

Gridx——组件的横向坐标

Girdy——组件的纵向坐标

Gridwidth——组件的横向宽度,也就是指组件占用的列数,这与HTML的colspan类似

Gridheight——组件的纵向长度,也就是指组件占用的行数,这与HTML的rowspan类似

Weightx——指行的权重,告诉布局管理器如何分配额外的水平空间

Weighty——指列的权重,告诉布局管理器如何分配额外的垂直空间

Anchor——告诉布局管理器组件在表格空间中的位置

Fill——如果显示区域比组件的区域大的时候,可以用来控制组件的行为。

控制组件是垂直填充,还是水平填充,或者两个方向一起填充

Insets——指组件与表格空间四周边缘的空白区域的大小

Ipadx——组件间的横向间距,组件的宽度就是这个组件的最小宽度加上ipadx值

ipady——组件间的纵向间距,组件的高度就是这个组件的最小高度加上ipady值

可能对于一个组件的每一个实例你都需要为它建立一个单独的GridBagConstraints;

然而,这种方法我们并不推荐使用。

最好的方法是,当你调用它的时候把对象设置为默认值,然后针对于每一个组件改变其相应的域。

这个方法具有通用性,因为在一些域中,比如insets、padx、pady和fill这些域,对于每一个组件来说一般都是相同的,因此这样对一个域进行设置就会更轻松了,也能更轻松的在另外的组件中改变某些域的值。

如果在改变了某些域值之后,你想回到原始的域值的话,你应该在增加下一个组件之前进行改变。

这种方法使你更容易明白你正在修改的内容,也能使你更容易明白在一连串对象中的这11个参数的作用。

也许你现在对这些内容还是一知半解,不过事实上一旦你理解了GridBagConstraints,值得安慰的是你以后做再困难的工作都会游刃有余了。

所以,如果我们已经明白了GridBagConstraints的详细用法了,那么现在就让我们来看看在实际应用中应该如何来实现它:

tagLbl=newJLabel("

c.gridx=0;

c.gridy=0;

gridbag.setConstraints(tagLbl,c);

//设置标签的限制

contentPane.add(tagLbl);

//增加到内容面板

我们所做的是示例我们的标签、分配给它一个格位置,将它与一个约束对象联系起来并把它增加到我们的内容面板中。

tagModeLbl=newJLabel("

c.gridy=1;

gridbag.setConstraints(tagModeLbl,c);

contentPane.add(tagModeLbl);

请注意,虽然我们已经在我们的约束对象中把gridx的值设置为0,但是在这里我们仍然要对它进行重新设置——这样做没有其它原因,只是为了增加可读性。

下面,我们增加一个文本域以便能存储我们希望能搜索到的关键字,再增加一个组合框以便用来搜索多个关键字。

除了我们希望的文本域有两列之外,这个概念其他的方面都与上面所说的是相同的,所以,我们需要在增加组合框之前重新设置文本域的值。

tagTxt=newJTextField("

c.gridx=1;

c.gridwidth=2;

gridbag.setConstraints(tagTxt,c);

contentPane.add(tagTxt);

String[]options={"

modeCombo=newJComboBox(options);

c.gridwidth=1;

gridbag.setConstraints(modeCombo,c);

contentPane.add(modeCombo);

做了这些之后,我们再在内容面板中增加一些其余的简单组件,这时候我们就能够浏览它了;

其余的代码应该不会出现任何问题了。

到这个阶段,我们应该已经得到了一个类似于我们先前所设计的界面了。

最近正在修改《公交线路查询系统》,做系统的时候都是用NULL布局,由于NULL布局调用windows系统的API,所以生成的程序无法在其他平台上应用,而且如果控件的数量很多,管理起来也比较麻烦,最近我发现一个非常强大的布局模式:

GridBagConstraints布局,先发一个实例:

gridx=2;

//X2

gridy=0;

//Y0

gridwidth=1;

//横占一个单元格

gridheight=1;

//列占一个单元格

weightx=0.0;

//当窗口放大时,长度不变

weighty=0.0;

//当窗口放大时,高度不变

anchor=GridBagConstraints.NORTH;

//当组件没有空间大时,使组件处在北部

fill=GridBagConstraints.BOTH;

//当格子有剩余空间时,填充空间

insert=newInsets(0,0,0,0);

//组件彼此的间距

ipadx=0;

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

ipady=0;

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

newGridBagConstraints(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=newGridBagConstraints(

//使用类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);

    ButtonButton5=newButton("

中"

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

    add(Button5);

    gbc.insets=newInsets(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;

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1