布局管理器课件_第1页
布局管理器课件_第2页
布局管理器课件_第3页
布局管理器课件_第4页
布局管理器课件_第5页
已阅读5页,还剩34页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Swing用户界面组件

——布局管理器第9.2布局管理概述布局管理器概述

布局管理器是Java中用来控制组件排列位置的一种界面管理API。通常,组件放置在容器中,布局管理器决定容器中的组件具体放置位置和大小。

Java支持五种布局FlowLayout

流布局BorderLayout边界布局GridLayout网格布局CardLayout

卡片布局Component类层次结构:按钮、文本域和其他用户界面元素都继承于Component类,组件可以放置在面板这样的容器中。由于Container类继承于Component类,所以容器也可以放置在另一个容器中。Component类层次结构:ObjectComponentContainerWindowJComponentFrameDialogJFrameJDialogJPanelJTextComponentJLabelJScrollPaneJComboBoxAbstractButtonJMenuBarJTextFieldJTextAreaJMenu-ltemJToggleButtonJButton:每个容器都有一个默认的布局管理器,但可以重新进行设置。例如,使用下列语句:panel.setLayout(newGridLayout(4,4));这个面板将用GirdLayout类布局组件。可以往容器中添加组件。容器的add方法将把组件和放置的方位传递给布局管理器。构造新布局

FlowLayout()

FlowLayout(intalign)

根据指定的对齐方式来构造一个新FlowLayout参数:

FlowLayout.LEFT左对齐

FlowLayout.RIGHT右对齐

FlowLayout.CENTER居中

FlowLayout(intalign,inthgap,vgap)

根据指定对齐方式来构造新的FlowLayout

align:对齐方式

hgap:水平距离

vgap:垂直距离边框布局边框布局管理器(borderlayoutmanager)边框布局管理器是每个JFrame的内容窗格的默认布局管理器。边框布局管理器将界面分为上下左右及中间5部分,每添加一个组件就要指定组件摆放的方位。在上下左右的组件将贴边放置,不指定摆放位置将默认摆放在中间。如图:在放置组件时,先放置边缘组件,剩余的可用空间由中建组件占据。当容器被缩放时,边缘组件的尺寸不会改变,而中部组件的大小会发生改变。在添加组件时可以指定BorderLayout类中的CENTER、NORTH、SOUTH、EAST和WEST常量。并需要占用所有的位置,如果没有提供任何值,系统默认为CENTER。例如:frame.add(component,BorderLayout.SOUTH);构造BorderLayout新对象BorderLayout()BorderLayout(inthgap,intvgap)参数:

hgap

以像素为单位的水平间距离(负值强行重叠) vgap

以像素为单位的垂直间距(负值强行重叠)9.2.2

网格布局网格布局像电子数据表一样,按行列排列所有组件。其每个单元的大小都是一样的。

运用网格布局管理器所 编写的计算器

在网格布局构造器中,需要指定行数和列数: panel.setLayout(newGirdLayout(4,4));

源代码添加组件,从第一行第一列开始,然后是第一行的第二列,以此类推。panel.add(newJButton("1"));panel.add(newJButton("2"));(定义数字按键)GridLayout对象的定义:GridLayout(introws,intcolumn)GridLayout(introws,intcolumn,inthgap,intvgap)参数:rows:网格行数 column:网格列数 hgap以像素为单位的水平间距离(负值强行重叠) vgap以像素为单位的垂直间距(负值强行重叠)其中参数rows,column可以为0,但不能同时为0。 BorderLayout常用方法BorderLayout常用方法返回CardLayoutCardLayout的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就象一叠“扑克牌”每次只能显示最上面的一张。CardLayout常用方法CardLayout常用方法返回第9.6

复杂的布局管理复杂的布局管理在之前的布局管理概述中,只提到了边框布局,流布局和网格布局。对于复杂的问题而言,这几种布局显然不够。为啥这么麻烦!!!!widows程序猿在widows中,布局管理不是一个太大的问题:首先可以用对话框编辑器将组件拖放到对话框的表面上。然后,再使用编辑器完成组件对齐,均衡间隔,中心定位等工作。如果正在开发一个大型项目,可能根本就不必担心组件如何布局,技术娴熟的用户界面设计师会完成所有这些任务。java程序猿小样,我来给你讲讲原因!这样做会出现的问题:如果组件的大小发生改变,必须手动的更新。为何组件的大小会发生改变呢?两种可能。1.登陆登陆2.CancelAbbrec英文版德文版CancelAbbrechen德文翻译自Java1.0以来,AWT就含有网格组布局(gridbaglayout),这种布局将组件按行和列排列。行和列的大小可以灵活改变,并且组件可以横跨多行。这种布局管理器非常的灵活,但也非常复杂。好可怕的样子!箱式布局(boxlayout)springlayout:虚构的弹簧将同一容器的所有组件连接起来。Fail在2005年,NetBeans开发队伍发明了Matisse技术,这种技术将布局工具与布局管理器结合起来。用户界面设计者可以使用工具将组件拖拽到容器中,并指出组件的排列方式。工具将设计者的意图转换成组布局管理器的可以理解的指令,与手工地编写布局管理器布局管理的代码相比,这样做要便捷得多。做过的尝试9.6.1网格组布局

网格组布局是所有布局管理器之母。可以将网格组布局看成是没有任何限制的网格布局。在网格组布局中,行和列的尺寸可以改变、。可以将相邻的单元合并以适应较大的组件(很多字处理器以及HTML都利用这个功能编辑表格:一旦需要就合并相邻的单元格)。组件不需要填充整个单元格区域,并可以指定它们在单元格内的对齐方式。两个用于指定字体外观和大小的组合框两个用于指选择粗体和斜体的复选框。两个组合框的标签。一个用于显示示例字符串的文本区GridBagLayoutlayout=newGridBagLayout();panel.setLayout(layout);GridBagConstraintsconstraints=newGridBagConstraints();constraints,weightx=100;//行增量constraints.weighty=100;//列增量constraints.gridx=0;//行位置constraints.gridy=2;//列位置constraints.gridwidth=2;//占据行数constraints.gridheight=1;//占据列数panel.add(component,constraints);示例代码:如何使用网格组管理器进行布局?1)建立一个GridBagLayout的对象。不需要指定网格的行数和列数。布局管理器会根据后面所给的信息猜测出来。GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);2)将GridBagLayout对象设置成组件的布局管理器。3)为每个组件建立一个GridBagLayout对象。设置GridBagLayout对象的域以便指出组件在网格组中的布局方案。4)最后,通过下面的调用添加组件的约束: add(component,constraints);GridBagContraints类的成员变量列表如下:1).gridx,gridy指定组件放在哪个单元中.其值应该设为常数CridBagConstraints.RELATIVE.然后按标准顺序将组件加入网格包布局.从左到右,从上到下.2).gridwidth,gridheight指定组件将占用几行几列3).weightx,weighty指定在一个GridBagLayout中应如何分配空间.缺省为0.4).ipadx,ipady(内部填充)指定组件的最小宽度和高度.可确保组件不会过分收缩.

5).fill指定在单元大于组件的情况下,组件如何填充此单元..缺省为组件大小不变.以下为静态数据成员列表,它们是fill变量的值.GridBagConstraints.NONE不改变组件大小GridBagConstraints.HORIZONTAL增加组件宽度,使其水平填充显示区域GridBagConstraints.VERTICAL增加组件高度,使其垂直填充显示区域GridBagConstraints.BOTH使组件填充整个显示区域

6).anchor如果不打算填充可以通过anchor指定将组件放置在单元中的位置,缺省为将其放在单元的中部.可使用以下静态成员:GridBagConstraints.CENTERGridBagConstraints.NORTHGridBagConstraints.EASTGridBagConstraints.WESTGridBagConstraints.SOUTH

GridBagConstraints.NORTHEASTGridBagConstraints.SOUTHEASTGridBagConstraints.NORTHWESTGridBagConstraints.SOUTHWEST

7)insets可以通过设置GridBagLayout的insets域在组件周围增加附加的空白区域。通过设置inserts对象的left,top,right和bottom指定组件周围的空间量。这被称作外部填充。下面的策略可以让网格组布局的使用相对简单一些:1)在纸上画出组件布局草图。2)找出一种网格,小组件被放置在一个单元格内,大组件将横跨多个单元格。3)用0,1,2.......标识网格的行和列。现在可以读取gridx,gridy,gridwidth和gridheight的值。4)对于每个组件,需要考虑下列问题:是否需要水平或者垂直填充它所在的单元格?如果不需要,希望如何排列?这些就是fill和anchor参数的设置。5)将所有的增量设置为100.如果需要某行或某列始终保持默认的大小,就将这行或这列中所有组件的weightx和weighty设置为0.6)编写代码。仔细地检查GridBagConstraints的设置。错误的约束可能会破坏整个布局。7)编译,运行。9.6.2组布局

GroupLayout是一个LayoutManager,它将组件按层次分组,以决定它们在Container中的位置。GroupLayout主要供生成器使用,但也可以手工编码。分组由Group类的实例来完成。GroupLayout支持两种组。串行组(sequentialgroup)按顺序一个接一个地放置其子元素。并行组(parallelgroup)能够以四种方式对齐其子元素。

每个组可以包含任意数量的元素,其中元素有Group、component或间隙(gap)。间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。此外,GroupLayout还支持其值取自LayoutStyle的首选间隙。

GroupLayout是一个很重要的是额布局管理器,在jdk1.6才加入,配合其它的管理器可以实现很好的界面。

GroupLayout必须要设置它的GroupLayout.setHorizontalGroup和GroupLayout.setVerticalGroup。有时候用户可能不想使用任何布局管理器,而只是想把组件放在一个固定的位置上(通常称为绝对定位)。这对于与平台无关的应用程序来说并不是一个好主意,但可用来快速地构造原型。步骤:1)将布局管理器设置为null。2)将组件添加到容器中。3)指定想要放置的位置和大小。9.6.3不使用布局管理器示例代码:frame.setLayout(null);JButtonok=newJButton("ok");frame.add(ok);ok.setBounds(10,10,30,15);原则上,可以通过自己设计LayoutManager类来实现特殊的布局方式。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论