- AWT(抽象窗口工具集)
- Swing组件作为AWT的优化和改进
- AWT是图形用户界面编程的基础,Swing组件替代了绝大部分AWT组件,对AWT图形用户界面编程有极好的补充和增强
1.AWT容器
1.1容器(container)是Component的子类,容器对象本身也是一个组件,可以调用component的方法:
- setLocation(int x,int y):设置组件的位置
- setSize(int width,int height):设置组件的大小
- setBounds(int x,int y,int width,int height):同时设置组件的位置大小
- setVisible(boolean b):设置该组件的可见性
1.2容器内还可以盛装其他组件,容器类提供了如下常用方法:
- Component add(Component comp):向容器中添加其他组件,并返回被添加的组件
- Component getComponentAt(int x,int y):返回指定点的组件
- int getComponentCount():返回该容器内组件的数量
- Component[] getComponents():返回该容器内的所有组件
1.3AWT主要提供了如下两种主要的容器类型
- window:可独立存在的顶级窗口
-
Panel:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中
1.4Frame(代表常见的窗口,是Window的子类)
- Frame对象有标题,允许通过拖拉来改变窗口的位置,大小
- 初始化时为不可见,可用setVisible(true)来使其显示出来
- 默认使用BorderLayout来作为其布局管理器
1.5 Panel(AWT另一个典型容器,不能独立存在,必须放在其他容器中)
- 可作为容器来盛装其他组件,为放置组件提供空间
- 不能单独存在,必须放置到其他容器中
- 默认使用FlowLayout作为其布局管理器
1.6 ScrollPane(带滚动条的容器)
- 可作为容器来盛装其他组件,当组件占用空间过大时,ScrollPane自动产生滚动条,当然也可以通过指定特定的构造器参数来指定默认具有滚动条
- 不能单独存在,必须放置到其他容器中
- 默认使用BorderLayout作为其布局管理器,ScrollPane通常用于盛装其他容器,所以通常不允许改变ScrollPane的布局管理器
2.布局管理器
为了使生成的图形用户界面具有良好的平台无关性,Java提供了LayoutManager,LayoutManager可以根据运行平台来调整组件的大小
- AWT容器都有默认布局管理器,指定布局管理器通过调用
setLayout(LayoutManager lm)
来完成 - AWT提供了FlowLayout,BorderLayout,GridLayout,GridBagLayout,CardLayout 一共5个常用的布局管理器,Swing还提供了一个BoxLayout布局管理器
2.1 FlowLayout管理器(类似inline)
- 组件像流水一样默认从左到右,遇到边界重启一行
2.1.1构造器
- FlowLayout():使用默认对其方式,垂直间距,水平间距创建
- FlowLayout(int align):使用指定对其方式
- FlowLayout(int align,int hgap,int vgap):指定三个选项
- align使用三个FlowLayout类的静态常量:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT
2.2 BorderLayout管理器
- 使用BorderLayout管理的容器中添加组件时,需要指定添加到哪个区域中,如果没有指定默认添加到中间区域
- 如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件
2.2.1 构造器
- BorderLayout():使用默认水平间距,垂直间距
- BorderLayout(int hgap,int vgap):使用指定
2.3 GridLayout管理器(类似table布局)
2.3.1 构造器
- GridLayout(int rows,int cols):使用指定行数,列数,默认横向间距,纵向间距
- GridLayout(int rows,int cols,int hgap,int vgap):采用指定
2.4 GridBagLayout管理器
- 功能最强大,最复杂,GridBagLayout中,一个组件可以跨越一个或多个网格,并可以设置各网格的大小互不相同
- 为了处理GridBagLayout中GUI组件的大小,跨越性,Java提供了GridBagConStraints对象
使用步骤
1.创建GridBagLayout布局管理器,并指定GUI容器使用该布局管理器
GridBagLayout gb = new GridBagLayout();
constainer.setLayout(gb)
2.创建GridBagConStraints对象,并设置该对象的相关属性
gbc.gridx = 2;//设置横向索引
gbc.gridy = 1;//设置纵向索引
gbc.gridwidth = 2;//设置横向跨越多少网格
gbc.gridheight = 1;//设置纵向跨越多少网格
3.调用GridBagLayout对象的方法来简历GridBagConstraints对象和受控制组件之间的关联
gb.setConstraints(c, gbc);//设置c组件受gbc对象控制
4.添加组件,与采用普通布局管理器添加组件的方法完全一样
container.add(c);
- 需要添加多个时重复2--4
2.5 CardLayout管理器
- CardLayout布局管理器以时间而非空间来管理它的组件,它将加入容器的所有组件看成一叠卡片,每次只有最上面的那个Component课件,类似扑克牌
2.5.1 构造器
- CardLayout():默认
- CardLayout(int hgap,int vgap):指定边距
2.5.2 控制组件可见
- first(Container target):显示第一张卡片
- last(Container target):显示最后一张
- previous(Container target):显示前一张卡片
- next(Container target):显示后一张
- show(Container target,String name):显示指定名字
2.6 绝对定位
步骤:
1.将Container中的布局管理器设为nullsetLayout(null)
2.向容器中添加组件时,先调用setBounds()或setSize()方法来设置组件的大小,位置,或者直接创建GUI组件时通过构造器确定
- 绝对定位容易丧失跨平台特性
2.7 BoxLayout管理器(类似Flex布局?)
- 由Swing中引入
-
BoxLayout(Container target,int axis)
:指定创建基于target容器的BoxLayout布局管理器,该布局管理器的组件按axis方向排列,其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向 - BoxLayout通常和Box容器结合使用,Box容器类似Panel容器,但是默认使用BoxLayout管理器
- createHorizontalBox():创建一个水平排列的box容器
- createVerticalBox():创建一个垂直排列组件的Box容器