学习目标:
1、掌握布局管理器、AWT事件处理机制以及常用事件
2、熟悉Swing组件的使用
3、了解GUI开发的相关原理和技巧
GUI全称是GraphicalUser Interface,即图形用户界面。顾名思义,就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种图形界面元素。目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能。Java中针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javaxswing包中,简称为AWT和Swing。其中,AWT是SUN公司最早推出的一套API,它需要利用本地操作系统所提供的图形库,属于重量级组件,不跨平台,它的组件种类有限,可以提供基本的GUI设计工具,却无法实现目前GUI设计所需的所有功能。随后,SUN公司对AWT进行改进,提供了Swing组件,Swing组件由纯Java语言编写,属于轻量级组件,可跨平台,Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。Swing会用到AWT中的许多知识,掌握了AWT,学习Swing就变成了一件很容易的事情,因此本章将从AWT开始学习图形用户界面。
8.1 AWT概述
AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。在JDK中针对每个组件都提供了对应的Java类,这些类都位于iava.awt包中,接下来通过一个图例来描述这些类的继承关系,如图所示
从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是Component和MenuComponent。其中,MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AWT组件的父类,它表示一个能以图形化方式显示出来,并可与用户交互的对象。
Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本组件类是诸如按钮、文本框之类的图形界面元素,而容器类则是通过Component的子类Container实例化的对象。Container类表示容器它是一种特殊的组件,可以用来容纳其他组件。Container容器又分为两种类型分别是Window和Panel,接下来对两种类型进行详细讲解。
Window类是不依赖其他容器而独立存在的容器,它有两个子类,分别是Frame类和Dialog类。Frame类用于创建一个具有标题栏的框架窗口,作为程序的主界面,Dialog类用于创建一个对话框,实现与用户的信息交互,如图所示
Panel也是一个容器,但是它不能单独存在,只能存在其他容器 (Window或其子类)中,一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳其他组件。在程序中通常会使用Panel来实现一些特殊的布局。
package cn.itcast.chapter08.example01;
import java.awt.Frame;
public class Example01 {
public static void main(String[] args) {
//建立一个新窗体对象
Frame f = new Frame("我的窗体!");
//设置窗体的宽和高
f.setSize(400, 300);
//设置窗体在屏幕中所处的位置(参数是左上角坐标)
f.setLocation(300, 200);
//设置窗体可见
f.setVisible(true);
}
}
8.2 布局管理器
8.1小节提到过,组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。在java.awt包中提供了五种布局管理器,分别是FlowLayout (流式布局管理器) 、BorderLayout (边界布局管理器GridLayout(网格布局管理器) 、GridBagLayout (网格包布局管理器)和CardLayout (卡片布局管理器)。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器通过布局管理器来自动进行组件的布局管理。例如把一个Frame窗体的布局管理器设置为FlowLayout,代码如下所示:
FlowLayout
流式布局管理器 (FlowLayout) 是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。FlowLayout对象有三个构造方法,如表所示
表中,列出了FlowLayout的三个构造方法,其中,参数align决定组件在每行中相对于容器边界的对齐方式,可以使用该类中提供的常量作为参数传递给构造方法,其中FlowLayout.LEFT用于表示左对齐、FlowLayout.RIGHT用于表示右对齐FlowLayout.CENTER用于表示居中对齐。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
public class Example02 {
public static void main(String[] args) {
//创建一个名为FlowLayout的窗体
Frame f = new Frame("FlowLayout");
//设置窗体中的布局管理器FlowLayout,所有组件左对齐,水平间距为20,垂直间距30
f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30));
//设置窗体的大小
f.setSize(220, 300);
//设置窗体显示位置
f.setLocation(300, 200);
//把按钮添加到窗口
f.add(new Button("第1个按钮"));
f.add(new Button("第2个按钮"));
f.add(new Button("第3个按钮"));
f.add(new Button("第4个按钮"));
//设置窗体可见
f.setVisible(true);
}
}
BorderLayout
BorderLayout (边界布局管理器) 是一种较为复杂的布方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这五个区域中的任意一个。BorderLayout布局的效果如图所示
从图可以看出BorderLayout边界布局管理器,将容器划分为五个区域,其中箭头是指改变容器大小时,各个区域需要改变的方向。也就是说,在改变容器时NORTH和SOUTH区域高度不变长度调整,WEST和EAST区域宽度不变高度调整CENTER会相应进行调整。
当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Componentcomp,Object constraints)方法。其中参数comp表示要添加的组件,constraints指定将组件添加到布局中的方式和位置的对象,它是一个Obiect类型,在传参时可以使用BorderLayout类提供的5个常量,它们分别是EAST、SOUTH、WEST、NORTH和CENTER。
案例代码
接下来通过一个案例来演示一下BorderLayout布局管理器对组件布局的效果:
package cn.itcast.chapter08.example03;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
public class Example03 {
public static void main(String[] args) {
Frame f = new Frame("BorderLayout"); //创建一个BorderLayout的窗体
f.setLayout(new BorderLayout()); //设置窗体中的布局管理器
f.setSize(300, 300); //设置窗体大小
f.setLocation(300, 200); //设置窗体显示位置
f.setVisible(true); //设置窗体可见
//下面代码是创建5个按钮,分别用于填充BorderLayout的5个区域
Button but1 = new Button("东部");
Button but2 = new Button("西部");
Button but3 = new Button("南部");
Button but4 = new Button("北部");
Button but5 = new Button("中部");
//将创建好的按钮添加到窗体中,并设置按钮所在区域
f.add(but1,BorderLayout.EAST);
f.add(but2,BorderLayout.WEST);
f.add(but3,BorderLayout.SOUTH);
f.add(but4,BorderLayout.NORTH);
f.add(but5,BorderLayout.CENTER);
}
}
GridLayout
GridLayout(网格布局管理器) 使用纵横线将容器分成n行m列大小相等的网格每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1列(左上角)的网格中,然后在第1行的网格中从左向右依次放置其他组件,行满后继续在下一行中从左到右放置组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。
接下来学习下GridLayout的构造方法,如表所示
表中,列出了GridLayout的三个构造方法,其中,参数rows代表行数,cols代表列数,hgap和vgap规定水平和垂直方向的间隙。水平间隙指的是网格之间的水平距离,垂直间隙指的是网格之间的垂直距离。
案例代码
接下来通过一个案例演示GridLayout布局的用法 :
package cn.itcast.chapter08.example04;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
public class Example04 {
public static void main(String[] args) {
Frame f = new Frame("GridLayout"); //创建一个GridLayout窗体
f.setLayout(new GridLayout(3,3)); //设置GridLayout网格布局管理器,该窗体网格为3*3
f.setSize(300, 300); //设置窗体大小
f.setLocation(400, 300); //设置窗体位置
//循环添加9个按钮到GridLayout
for (int i = 1; i <= 9; i++) {
Button but = new Button("but"+i);
f.add(but); //想窗体中添加按钮
}
f.setVisible(true); //设置窗体可见
}
}
GridBagLayout
GridBagLayout (网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同而且允许一个组件跨越一个或者多个网格
使用GridBagLayout布局管理器的步骤如下:
(1)创建GridbagLayout布局管理器,并使容器采用该布局管理器
(2)创建GridBagontraints对象(布局约束条件),并设置该对象的相关属性
(3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联
(4)向容器中添加组件
文章来源:https://www.toymoban.com/news/detail-490909.html
GridBagConstraints对象可以重复使用,只需要改变它的属性即可。如果要向容器中添加多个组件,则重复 (2) 、 (3) 、 (4) 步骤
从上面的步可以看出,使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在GridBagConstraints类中有很多表示约束的属性,下面对GridBagConstraints类的一些常用属性进行介绍,如表所示。 文章来源地址https://www.toymoban.com/news/detail-490909.html
到了这里,关于Java——GUI(图形用户界面)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!