Java实用教程 第11章 AWT图形用户界面编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AWT事件与监听器
AWT事件与监听器
每个具体的事件都是某种事件类的实例,事件类包括:ActionEvent、ItemEvent、MouseEvent、 KeyEvent和WindowEvent等,事件类的层次结构如图11.6所示。
AWT事件与监听器
要处理一个对象所产生的事件,首先必须注册该对象的监听者。 java.awt.event包按照不同的事件类型定义了11个监听器接口,每类 事件都有对应的监听器,监听器是接口,其中定义了事件发生时 可调用的方法,一个类可以实现监听器的一个或多个接口。表11.1 列出了AWT事件的监听器接口。
void add(Component comp,Object constraints)
这里的constraints参数是一个字符串,表示卡片的名字。默认情况下,容器显示第一个用add() 方法加入其中的组件,也可通过CardLayout的show(Container parent,String name)方法指定显 示哪张卡片,参数parent指定容器,参数name指定卡片名字。
布局管理器
【例11.3】结合多种布局管理器设计一个计算器程序的界面。
MyLayout.java
package org.awt;
import java.awt.*;
public class MyLayout {
public static void main(String args[]) {
Frame fr = new Frame("计算器");
第11章 AWT图形用户界面编程
基本AWT库采用将处理用户界面元素的 任务委派给每个目标平台(Windows、 Solaris、Macintosh等),由本地GUI工 具箱负责用户界面元素的创建和动作。 例如,如果使用最初的AWT的Java窗口 放置一个文本框,就会有一个底层的 “对等体”文本框,用来实际处理文本 输入。从理论上说,结果程序可以运行 在任何平台上,但感观的效果却依赖于 目标平台。AWT中的图形元素可以分为 两类:基本组件Component和容器 Container。如图11.1所示列出了AWT中 的主要类及相应包之间的层次关系。
布局管理器
2.边界布局管理器
BorderLayout将容器分成东、南、西、北、中五个区域来安排组件。 BorderLayout的构造方法:
BorderLayout(int hgap,int vgap)
其中,参数hgap和vgap分别设定组件之间的水平和垂直间距。对于采用BorderLayout的容器, 当它用add()方法添加一个组件时,应该指定组件在容器中的区域,如下:
fr.add(p1, BorderLayout.NORTH);
// 将p1添加到窗口NORTH区域(即顶部)
Panel p2 = new Panel();
// 创建面板p2
p2.setLayout(new GridLayout(4, 5, 3, 3));
// 设置p2使用GridLayout布局
String[] name = {"7", "8", "9", "÷", "√", "4", "5", "6", "×", "%"
布局管理器
布局管理器

Java为了实现跨平台的特性并获得动态的布局效果,将容器内所有组件的大小、位置、顺序、间 隔等交给布局管理器负责,共有5种布局管理器:FlowLayout、BorderLayout、GridLayout、 CardLayout和GridBagLayout。所有的容器都会引用一个布局管理器实例,通过它来自动进行组件 的布局管理。
布局管理器
3.网格布局管理器
GridLayout将容器分成一个个格子,按行依次排列组件,各组件大小相同。 GridLayout的构造方法:
GridLayout(int rows ,int cols,int hgap,int vgap) 其中,rows代表行数,cols代表列数,hgap和vgap规定网格之间的水平和垂直间距。
, "1", "2", "3", "-", "1/x", "0", ".", "C", "+", "±"};
for(int i = 0; i<name.length; i++) {
// 向p2中依次添加20个按钮
p2.add(new Button(name[i]));
} fr.add(p2); fr.pack();
// 主窗口fr使用默认的BorderLayout布局
Panel p1 = new Panel();
// 面板p1使用默认的FlowLayout布局
// 向p1中添加两个组件(文本框和“计算”按钮),以FlowLayout横向布局
p1.add(new TextField(16));
p1.add(new Button("计算"));
fr.setTitle("This is a Frame");
// 设定窗体标题
fr.setSize(400,300);
// 设定窗体的宽度为400,高度为300
fr.setBackground(Color.green);
// 设定窗体的背景色为绿色
fr.setLocation(300,500);
// 设定窗体左上角的初始位置为(300,500)
窗口事件
窗口事件
WindowEvent类对应窗口事件,包括用户单击“关闭”按钮、窗口得到与失去焦点、窗口最小化 等。窗口事件对应的监听器是WindowListener。 【例11.4】一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、 3,而6 = 1+2+3,因此6是“完数”。编程序找出1000以内的所有“完数”。 运行程序,在文本框中输入数字1000,按下回车键,则将1000以内的所有完数及其构成因子写入 文本区,如图11.7所示。
void add(Component comp,Object constraints)
这里的constraints是String类型,可选值为BorderLayout提供的5个常量(分别表示5个布局区 域):EAST(东)、SOUTH(南)、WEST(西)、NORTH(北)和CENTER(中),如果不 指定constraints,默认把组件放在中区域。向同一个区域加入的多个组件,只有最后加入的组 件是可见的。
布局管理器
4.卡片布局管理器
CardLayout将界面看成一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据 容器的整个区域。 CardLayout的构造方法:
CardLayout(int hgap,int vgap) 其中,参数hgap表示卡片与容器左右边界的间距,参数vgap表示卡片与容器上下边界的间距。 对于采用CardLayout的容器,当用add()方法添加一个组件时,需要同时为组件指定所在卡片 的名字,如下:
setLocation()、setSize()或setBounds() 方法,为它们在容器中一一定位。
布局管理器
1.流式布局管理器
FlowLayout是把组件从左向右、从上向下,一个接一个地放到容器中,组件之间的默认间隔 (水平和垂直)为5个像素,对齐方式为居中。组件的大小由布局管理器根据组件的最佳尺寸 来决定。 FlowLayout的构造方法:
KeyListener接口能够监听的事件有3种:键按下(Pressed)、键释放(Released)及键的按下并 释放(Typed),相应的事件处理方法如下。
(1)public void keyTyped(KeyEvent e):当键盘上一个键被按下并释放后该方 法被调用。
(2)public void keyPressed(KeyEvent e):当键盘上一个键被按下后该方法被调用。
AWT容器
Window和Frame
Window和Frame
Window有两个子类:Frame和Dialog。Frame带有标题,而且可以调整大小。Dialog可以被移动, 但是不能改变大小。Frame有一个构造方法Frame(String title),通过它可以创建一个以参数为标题 的Frame对象。Frame的add()方法向容器中加入其他组件。Frame被创建后是不可见的,必须通过 以下步骤使它成为可见。
(1)默认布局管理器 当一个容器被创建后,它们有相应
的默认布局管理器。Window、 Frame和Dialog的默认布局管理器 是BorderLayout,Panel的默认布局 管理器是FlowLayout。
(2)取消布局管理器 如果不希望通过布局管理器来管理布
局,可以调用容器的setLayout(null)方 法,这样布局管理器就被取消了。但 接下来必须调用容器中每个组件的
// 默认将p2添加到窗口中(CENTER)区域 // 设置窗口为最佳大小
fr.setVisible(true);
}
}
布局管理器
程序运行结果如图11.4所示。
事件处理机制
事件处理机制
在Java中,监听器是一个实现了特定监听接口的类的实例,事件源是一个能注册监听器并发送事 件对象的对象。当事件发生时,事件源将事件对象传递给所有注册的监听器,监听器利用事件对 象中的信息决定如何对事件作出响应,典型的过程如图11.5所示。
FlowLayout(int align,int hgap,int vgap)
其中,参数align用来决定组件在每行中相对于容器边界的对齐方式,可选值有: FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)和FlowLayout.CENTER(居中对 齐);参数hgap和vgap分别设定组件之间的水平和垂直间距。
【例11.1】创建一个Frame对象并使用Frame类的常用方法。 MyFrame.java
package org.awt;
import java.awt.*;
public class MyFrame {
public static void main(String args[]) {
Frame fr = new Frame();
fr.setResizable(false);
// 设定窗体为不可调整大小
fr.setVisible(true);
// 将窗体设为可见
}
}
Window和Frame
程序运行结果如图11.2所示。
Panel
Panel
面板Panel是一个通用的容器,它没有边框 或其他可见的边界,不能移动、放大、缩小 或关闭,不能单独存在,只能存在于其他容 器(Window或其子类)中。一个Panel对象 代表一个区域,其中可容纳其他组件。 Panel的add()方法向Panel中添加组件。如要 使Panel成为可见的,必须通过Frame或 Window的add()方法把它添加到Frame或 Window中。Frame的setBounds (int x,int y,int width,int height)方法移动组件并调整 其大小,由x和y指定左上角的新位置,由 width和height指定新的大小。 【例11.2】创建4个Panel对象,并将它们添 加到窗体上。 程序运行结果如图11.3所示。
(1)调用setSize(int width,int height)显式 设置Frame的大小,或者调用pack()自动 确定Frame的大小。pack()方法确保Frame 容器中的组件与窗体相适应的大小。
(2)调用setVisible(true)方法使 Frame成为可见。
Window和Frame
(3)public void keyReleased(KeyEvent e):当键盘上一个键被释放时该方法被调用。
KeyEvent类中常用的方法如下。
键盘事件
public int getKeyCode():返回键
盘事件中相关键的整数型键码。 (1)
鼠标事件
鼠标事件
MouseEvent类对应鼠标事件,包括鼠标按下、释放、单击等。鼠标事件对应的监听器是 MouseListener。 【例11.5】设计一个窗口,其上有个按钮,当鼠标移到按钮上单击时立即隐藏该按钮;而鼠标离 开时又重新显示该按钮。 运行程序,效果如图11.8所示。
键盘事件
键盘事件
相关文档
最新文档