Swing程序设计(二)——布局

布局

  • 绝对布局(null)
    常用方法:
    Container.setLayout(null) 设置为绝对布局
    Component.setBounds(int x,int y,int width,int height) 设置每个组件的位置和大小
    Container.add(Component a) 添加组件到绝对布局的容器中
    注:组件大小和位置固定,窗体大小改变也不会改变组件大小和位置。

布局管理器:

  • 流布局管理器(FlowLayout)
    Panel面板的默认布局,从左到右排放组件,默认每行居中排列,虽窗口大小变化,组件位置也发生相应的变化

    常用构造方法:
    public FlowLayout()
    public FlowLayout(int alignment) 指定排列方式:如居中对齐
    public FlowLayout(int alignment,int horizGap,int vertGap) 指定排列方式和组件之间的水平间隔和垂直间隔,以像素为单位。

    alignment参数(排列对齐方式)取值:
    FlowLayout.LEFT或者0
    FlowLayout.CENTER或者1
    FlowLayout.RIGHT或者2

    常用方法:
    1.Container.add(Component a) 添加组件到流布局管理器的容器中
    2.public void setHgap(int hgap) 设置组件之间以及组件与 Container 的边之间的水平间隙。
    3.public void setVgap(int vgap) 设置组件之间以及组件与 Container 的边之间的垂直间隙。

  • 边界布局管理器(BorderLayout)
    Frame窗体的默认布局,分为五个区域:东西南北中(EAST、WEST、SOUTH、NORTH、CENTER)。

    注:1.添加组件时需指定区域,否则默认添加到CENTER区域。2.同一区域添加多个组件会被覆盖。

    常用方法:
    setLayout(new BorderLayout())
    Container.add(Component a,组件位置)

    组件位置:
    BorderLayout.EAST
    BorderLayout.WEST
    BorderLayout.SOUTH
    BorderLayout.NORTH
    BorderLayout.CENTER

  • 网格布局管理器(GridLayout)
    将容器划分为网格,组件依次从左到右从上到下的顺序排列并充满整个网格,改变窗体大小,组件大小也随着改变。

    常用构造方法:
    GridLayout(int rows,int columns) :rows行columns列
    GridLayout(int rows,int columns,int horizGap,int vertGap) :rows行columns列,另外两个参数为网格之间的水平距离和垂直距离。

    注:当行列数其中一个为0时,添加的组件数量大于(行*列)的个数,行或者列可以排任意多个组件。如:当rows为0时,在满足columns的值的情况下,行的数量不确定。当没有行列值为0时,组件数量大于乘积数,优先满足行数,列数不确定。

    常用方法:
    Container.setLayout(GridLayout a)
    Container.add(Component b)

  • 网格组布局管理器(GridBagLayout)
    实现了一个动态的矩形网格,这个网格由无数个矩形单元格组成,组件可以占用一个或者多个单元格,添加组件时,要为每个组件创建一个与之关联的GridBagConstraints类对象,即约束。该对象可以设置组件的布局信息。

    约束类创建及使用:
    GridBagConstraints a = new GridBagConstraints()
    Container.add(Component,a)

    设置约束属性:
    1.gridx和gridy属性:设置组件起始点所在单元格的索引值,gridx设置的是网格水平方向的索引值,表示的是组件起始点所在列的索引;gridy设置的是网格垂直方向的索引值,表示的是组件起始点所在行的索引。
    使用方法:
    如a.girdx=1;a.gridy=2; 注:起始点坐标为(0,0),该表示第三行第二列的网格。

    2.gridwidth和gridheight属性:设置组件占用网格的行数和列数,默认一格。
    使用方法:
    如a.gridwidth=2;a.gridheight=3;表示宽占两格,高占3格。

    3.anchor属性:用来设置组件所在显示区域的显示位置。在组件的显示区域划分9个位置以及他们在GridBagConstraints类中的静态常量表示为:
    北方:GridBagConstraints.NORTH
    南方:GridBagConstraints.SOUTH
    西方:GridBagConstraints.WEST
    东方:GridBagConstraints.EAST
    东北:GridBagConstraints.NORTHWEST
    西北:GridBagConstraints.NORTHWEST
    东南:GridBagConstraints.SOUTHEAST
    西南:GridBagConstraints.SUOTHWEST
    中心:GridBagConstraints.CENTER(默认位置)

    使用方法:
    如:a.anchor = GridBagConstraints.SUOTHWEST

    4.fill属性:用来设置组件的填充方式,当单元格显示区域大于组件面积,或者组件占用多个单元格,往往组件不会充满整个显示区域。他有四个静态常量:
    NONE :不调整组件大小,在显示区居中,默认为NONE
    HORIZONTAL :调整组件水平方向的大小至充满水平方向显示区域
    VERTICAL : 调整组件垂直方向大小至充满垂直方向显示区域
    BOTH:直接充满整个显示区域

    使用方法:
    如a.fill = GridBagConstraints.HORIZONTAL;

    5.insets属性:insets是一个类,用来设置组件与单元格边缘之间的最小距离,默认没有距离

    构造方法:
    Insets(int top,int left,int bottom,int right),参数分别代表与上左下右单元格边缘的距离

    使用方法:
    如a.insets = new Insets(5,10,5,10),经过观察发现以下规律:
    (1).当在某方向上(水平或者垂直)的显示区域(宽度或者高度)>组件的宽度或者高度+与同一方向上两边单元格边缘距离,会以同一方向上第二次改变的距离为真正的距离,即bottom或者right的距离。
    (2).当在某方向上(水平或者垂直)的显示区域(宽度或者高度)<组件的宽度或者高度+与同一方向上两边单元格边缘距离,则会以该行(或者该列)最大高度(或者宽度,即top+正在添加的组件高度+bottom或者。。。)将整行或者整列显示区域撑大。

    6.ipadx和ipady属性:用来修改组件的首选大小,即改变初始大小,ipadx修改组件宽度,ipady修改组件高度,如果为负数,则在首选大小的基础上减小指定的宽度和高度。,如果为正就加。

    7.weightx和weighty:设置网格组每一行每一列对额外空间的分布方式,即按比例变大。默认情况下或者都为0,当窗体变大时组件四周出现大片额外空间,即组件及组件所占区域不会变化。weightx用来设置其所在列对额外空间的分布,weighty设置所在行,如果在一行或者一列存在多个weighty或者weightx,取其中的最大值做为该行或者该列的分布方式。

    注:据观察发现只有设置了约束的组件,组件大小才会按比例变大,没有设置或者为0的组件,只有显示区域随着最大值变化,组件大小不会跟着改变。建议只设置第一行每个网格的weightx和第一列每个网格的weighty,方便前期调试和后期维护并且设置时最好按百分比取值。第一行和第一列所有单元格尽量填充控件,否则相应的行(或者列)在该行(或者该列)在没有其中一个单元格weighty=1(weightx=1)的情况下会被压缩至很小,以至于其他占多格的组件也被压缩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值