本帖最后由 王婷婷 于 2013-5-15 20:11 编辑
1、布局 布局,简单地说,就是控制界面的排列方式,包括组件的位置和大小的设定。 创建指定布局方式类的对象,然后调用容器类的setLayout()方法来指定所需的布局方式。例:setLayout(new FlowLayout()); 使用 setLocation() setSize() setBounds()设置组件的大小及位置。 布局管理器:指系统事先定义好的若干容器布局效果,使用它们可以方便地实现组件在容器的布局管理,并能够满足各种常规需要。例如,FlowLayout等 每一个容器都有默认的布局管理器,在创建一个容器对象时,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。
常用布局管理器 (1)FlowLayout:流式布局,是Panel(及其子类)类型容器的默认布局管理器类型。
组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。自左向右、自上而下的安排组件,并且尽量将组件居中。 流式布局不会改变组件的尺寸,当当前行无法显示新增组件时,布局管理器会新增一行以安放新增组件且组件顺序和尺寸不随窗口变化而变化。 组件按原始大小进行显示。 构造方法 public FlowLayout() public FlowLayout(int align) public FlowLayout(int align,int hgap,int vgap)
(2)BorderLayout:边界布局,是Window及其子类类型容器的默认布局管理器。
将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式。在使用边界布局的容器中,组件的尺寸也被布局管理器强行控制,即与其所在区域的尺寸相同。 构造方法 public BorderLayout() public BorderLayout(int hgap,int vgap) BorderLayout的使用。 f.setLayout(new BorderLayout()); f.add(btnNorth,"North"); f.add(btnSouth,"South"); f.add(btnWest,"West"); f.add(btnEast,"East"); f.add(btnCenter,"Center"); (3)GridLayout:网格布局
需要事先指定布局的行列,形成网格。 组件由左向右、由上至下,并在本布局中会填充网格。缺点在此,因为有可能造成组件显示失真。 当组件超过列数的时候,不是直接添加到下一行,而是增加列数,行数保持不变。 和流布局管理器类不同的地方在于,组件不会因为窗体大小的变化而移位,相反,组件通过自动缩放以保持屏幕组件的网格关系。 构造方法 public GridLayout() public GridLayout(int rows,int cols) public GridLayout(int rows,int cols,int hgap,int vgap)
当GridLayout布局的容器尺寸发生变化时,每个单元格的大小都将随之作调整,组件的大小也会发生变化。 正常情况下使用GridLayout布局时,向容器中加入的组件数目应与容器划分出来的单元格总数相等,但假如出现两者数目不等的情况,程序也不会出错,而是保证行数为设置值,列数则通过指定的行数和布局中的组件总数来进行调整。 (4)卡片布局(CardLayout)
卡片布局可以同时容纳多个组件,但只能一次显示一个组件 卡片布局的创建过程: 创建卡片布局对象:mycard=new CardLayout(); 设置布局:container.setLayout(mycard) 添加组件:container.add(组件代号,组件); 显示:mycard.show() (5) GridBagLayout
是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的.这种现象源于它所提供的众多的可配置选项,你几乎可以完全地控制容器的布局方式.尽管复杂性很明显,只要理解了基本思想,就很容易使用GridBagLayout了. GridBagLayout从它的名字中你也可以猜到,它同GridLayout一样,在容器中以网格形式来管理组件.但GridBagLayout功能要来得强大得多. GridBagLayout管理的所有行和列都可以是大小不同的.通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints.其中的所有成员都是public的, 因此要学好如何使用GridBagLayout首先要了解有那些约束变量,以及如何设置这些约束变量. 常用构造: public GridBagLayout()
2、创建图形化的步骤: 创建一个容器,并设置其属性,将需要的组件添加到容器中,并编写相应的触发事件。 public static void main(String[] args) { //创建frame对象并初始化(带有标题和边框的窗口) Frame f = new Frame("我的第一个Frame窗口"); //一般是横坐标 纵坐标 f.setSize(500,400); //与左边界的距离,与上边界的距离 f.setLocation(500,100); Button b = new Button("按钮"); f.add(b); //匿名内部类 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("关闭窗口"); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("窗口前置"); } public void windowDeactivated(WindowEvent e) { System.out.println("窗口后置"); }
}); f.setLayout(new FlowLayout()); f.setVisible(true); //System.out.println("Hello World!"); } |