Java学习-Day06-图形用户界面编程

  • 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:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中


    AWT容器的继承关系
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
  • 使用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容器

你可能感兴趣的:(Java学习-Day06-图形用户界面编程)