chp8.ppt

Similar documents
Chapter 9: Objects and Classes

第1章

Java事件处理模型

<4D F736F F F696E74202D C DB5DA3136D5C25FCAC2BCFEC7FDB6AFB3CCD0F2C9E8BCC62E BBCE6C8DDC4A3CABD5D>

Microsoft Word - 投影片ch18

untitled

图形用户界面 (GUI) 设计

Microsoft Word - 正文.doc

Swing-02.pdf

PowerPoint 簡報

PowerPoint 演示文稿

Microsoft Word - Broker.doc

Microsoft Word - Java全文.doc


Microsoft Word - 正文.doc

chp11.ppt

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

java2d-4.PDF

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

Chapter 9: Objects and Classes

Microsoft PowerPoint - 18_Event.pptx

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充

授课内容 内容 图形界面与控制台应用的区别 (Console Application) 第 6 章图形用户界面图形用户界面 (Graphical User Interface,GUI), 使用图形方式借助菜单 按钮等标准界面元素和键盘 鼠标操作, 实现人机交互 内容和要求 : 掌握 Java Swi

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

软件工程文档编制

Chapter 9: Objects and Classes

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

Microsoft Word - 正文.doc

Microsoft PowerPoint - ch02

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

Microsoft PowerPoint ppt

JavaIO.PDF

(京)新登字063号

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787

基于CDIO一体化理念的课程教学大纲设计

1.3 最终效果图 : 2 内部布局代码 2.1 按键按钮代码 // 初始化计算器上键的按钮, 将键放在一个画板内 JPanel keypanel = new JPanel(); // 用网格布局器,4 行,5 列的网格, 网格之间的水平方向间隔为 3 个象素, 垂直方向间隔为 3 个象素 keyp

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

Chapter 9: Objects and Classes

幻灯片 1

Microsoft Word - 新1-12.doc

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Learning Java

图形学 Project 1 要求 多边形区域填充 ( 算法不限 ) 使用说明 例 1 第一步, 鼠标随意在界面中的画布上点击两次, 则两点间连一条直线 ; 第二步, 画第三个顶点时, 自动连结成为三角形 ; 第三步, 按顺序依次点击, 则按点击顺序形成多边形, 每次多边形变化时, 第一个点和最后

利用Java技术编写桌面软件基础

Microsoft PowerPoint - course8.ppt

基于JAVA的连连看游戏设计

ZW1.PDF

可 Web 编程的NativeUI 设计与实现

F515_CS_Book.book

Microsoft Word - 投影片ch17

Topic

D C 93 2

E3. 最 大 公 因 數 問 題 描 述 : 寫 一 程 式 求 兩 數 之 最 大 公 因 數 利 用 TextField 元 件 輸 入 正 整 數 M, N (1 N M 9999), 按 下 compute 按 鈕 後 計 算 正 整 數 M, N 的 最 大 公 因 數, 並 顯 示 於

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探

第8章 JavaScript对象层次与事件处理

无类继承.key

chp9.ppt

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

手册 doc

chp6.ppt

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

X713_CS_Book.book

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

Guava学习之Resources

输入 project name 选择完成

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

javaexample-02.pdf

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

Microsoft PowerPoint - ch03

第1章

实验1——Java程序设计基础

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java 1 Java String Date

untitled

Microsoft Word - 投影片ch23

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

第1章

Microsoft Word Java语言程序设计案例教程正文.doc

《大话设计模式》第一章

mvc

大漠 伪前端, 就职于淘宝

Microsoft Word - Java程序设计全文_终_.doc

Struts2自定义类型转换.doc



壹 前言 一 研究動機 現今社會大眾近視比例逐年增加, 原因在於電腦不當且過度使用, 說其根本便是因為並無注意時間因此導致眼睛無法負荷, 然而使用者並非要使用如此長的時間, 或者家長規定小孩的電腦使用限制時間, 但卻沒有輔助的工具來提醒休息時間, 因此我們想了這個程式來幫助改善這個問題 二 研究目的

Microsoft Word - 投影片ch20

Transcription:

Java 软件设计基础 图形用户界面程序设计入门

1. 组件概述 GUI: Graphics User Interface 设计和实现 GUI 的主要难点 创建组成界面的各成分和元素, 指定它们的属性和位置关系, 根据具体需要布局排列, 从而构成完整的 GUI 的外观表象 ; 在 GUI 程序中, 代码所执行的路线及顺序都是很不确定的 在 GUI 程序中, 用户可以点击任意按键并和屏幕上的其他任何部分进行交互及信息传递 即事件驱动 Java 提供了大量支持 GUI 设计的类 AWT(Abstract Window Tookit) 包 Button Label TextField CheckBox Swing 包 JButton JLabel JTextField JCheckBox

Swing 和 AWT 对 Java 运行的每一个平台,AWT 的组件自动的通过它们各自的代理映射成特定平台的组件, 这些代理称为同位体 (peer) AWT 组件的设计原理是把与显示组件有关的许多工作和处理组件事件的工作交给相应的本地组件, 因此非常依赖底层平台 ; AWT 适用于开发简单的 GUI, 但不适于开发复杂的 GUI 项目 随着 Java 2 的发行,AWT 的用户界面组件被更稳定 通用和灵活的 Swing 组件库取代 大多数 Swing 组件由 Java 代码绘制在画布上, 更少的依赖目标机器上的底层平台 不依赖本地 GUI 的 Swing 组件称为轻组件 Lightweight component; AWT 组件称为重组件 Heavyweight component

Swing 外观与 Windows 外观

Java GUI API 层次结构

GUI 类 容器类 (Container) 用来包含其他组件 ;Window Panel Applet Frame 和 Dialog 都是 AWT 组件的容器类 ;Conponent Container JFrame JDialog JApplet 和 JPanel 都是 Swing 的容器类 其中 : Container 用来组织组件 ; JFrame 是不能包含在另一个窗口内的窗口 ; JDialog 是一个弹出式窗口或消息框 ; JApplet 是 Applet 的一个子类 ; JPanel 是一个存放用户界面组件的不可见的容器, 可以嵌套 组件类 (Component) 组件是一个可以以图形化方式显示于屏幕上与用户进行交互的对象 按钮 菜单 标签 文本域 复选框

辅助类 辅助类都不是 Component 的子类, 它们用来描述 GUI 组件的属性, 例如颜色 字体 大小等 Graphics 类是一个抽象类, 提供一个图形环境, 用于绘制字符串 直线和简单几何图形 ; Color 类用来处理 GUI 组件的颜色 ; Font 类指定 GUI 组件上文本和图形的字体 ; FontMetrics 是用于获取字体属性的抽象类 ; Dimension 将组件的宽度和高度 ( 精度为整数 ) 封装在单个对象中 ; LayoutManager 是一个接口, 指定组件在容器中的摆放方式 辅助类包含在 AWT 包中 Swing 组件不能取代 AWT 的全部类, 只能替代 AWT 的 GUI 组件类 ; AWT 的辅助类保持不变

GUI 设计的简要流程 引入 java.awt 包或 javax.swing 包 ; 利用包中提供的组件类来定义某种组件 ; 定义一个放置组件的容器 ; 对容器进行布局管理, 将此组件添加到该容器中 ; 为了让该组件响应某个事件, 还要注册组件对应的事件监听器并实现相应的监听器接口

2. AWT 图形化界面基础 Frame/JFrame JFrame 框架 Frame 框架是 Windows 类的子类, 它是窗口的一种, 是顶级窗口 Frame 组件在 Java 的顶层窗口中可以独立使用 包含标题 边框等 当 Frame 被关闭后, 将产生 WindowEvent 事件 Frame 无法直接监听键盘输入事件 构造方法 : 建立一个没有标题的新 Frame 对象 : Frame() 建立一个以 title 为标题的 Frame 对象 : Frame(String title)

主要方法 : setsize(int width, int height) 设置长宽 setbackground(color c) 设置背景色 setvisible(boolean b) 设置是否可见 String gettitle() 获取标题 settitle(string title) 设置标题为 title boolean isresizable() 测试是否可以改变大小 Image geticonimage() 获取最小化图标 seticonimage(image img) setbounds(int x, int y, int width, int height) 设置最小化图标 设置大小和位置

示例 :

Panel 面板 简介 : 是 Container 类的子类, 也是容器, 可容纳其他组件 面板不是顶级窗口, 不能独立存在, 必须将它添加到其他容器中 创建一个 Panel 对象后需将该对象放入 Window 和 Frame 中才可使 Panel 中的内容可见 构造方法 : 建立一个默认布局的新 Panel 对象 : Panel() 建立一个布局为 layout 的 Panel 对象 : Panel(LayoutManager layout)

示例 创建 Panel import java.awt.*; public class Win_Panel{ public static void main(string args[]){ Frame f = new Frame("Panel"); Panel p = new Panel(); f.setsize(180,180); f.setbackground(color.pink); f.setlayout(null); p.setsize(90,90); p.setbackground(color.blue); f.add(p); p.setlocation(45,45); f.setvisible(true); } }

Button 按钮 简介 是 Java 程序 GUI 设计中最常用的一个组件, 是可以提供用户快速启动某一动作的类 按钮本身不显示信息, 它一般对应一个事先定义好的功能操作, 并对应一段程序 当用户点击按钮时, 系统自动执行与该按钮相联系的程序, 从而完成预先指定的功能 构造方法 构造一个没有标题的按钮 : Button() 构造一个标题为 str 的按钮 : Button(String str)

主要方法 String getlabel() 返回按钮的标题 setlabel(string s) 设置按钮的标题为 s getactioncommand() 返回所引用的 Button 对象产生的动作事件关联的命令名称 setactioncommand(string c) 设置所引用的 Button 对象产生的动作事件关联的命令名称 示例 创建 Button import java.awt.*; public class Button1{ public static void main(string args[]){ Frame f = new Frame("Button"); Button b1 = new Button("Push me"); Button b2 = new Button("You can not push me"); f.setbounds(0,0,300,200); f.setlayout(null); b1.setbounds(10,40,100,40); b2.setbounds(10,100,200,40); b2.setenabled(false); f.add(b1); f.add(b2); f.setvisible(true); } }

Label 标签 简介 是一种用来显示说明性的静态文本的组件, 它起到信息说明的作用 标签是用户只能查看而不能简单的修改其内容的文本显示区域, 但用户可以在应用程序中通过调用 Label 提供的方法更换文本的内容 构造方法 创建一个没有名字的标签对象 Label() 创建一个名字为 str 的标签对象 Label(String str) 创建一个名字为 str 的标签对象, 对齐方式为 align Label(String str, int align) 其中 Label.LEFT Label.RIGHT Label.CENTER 分别为居左 居右 居中

主要方法 String gettext() 返回 Label 对象文本的 String settext(string s) 设置 Label 对象的文字 setalignment(int align) 示例 设置 Label 对象的对齐方式

TextField 文本框和 TextArea 文本域 它们都是 TextComponent 的子类, 用于文本处理 TextField 文本框是单行文本输入域, 多用于单行显示 当按下回车键时, 会发生事件 (ActionEvent), 可以通过 ActionListener 中的 actionperformed 方法对事件进行处理 构造方法 创建一个初始文本串为空的文本框对象 TextField() 创建一个初始文本串为 str 的文本框对象 TextField(String str) 创建一个初始文本串为 str 列数为 column 长度的文本框对象 TextField(String str, int column)

主要方法 settext(string s) 将文本框对象的文本信息设置为 str gettext() 返回文本框对象的文本信息 getselectedtext() 返回文本框对象被选的文本串信息内容 setechochar(char ch) TextArea 是多行文本组件, 用于显示程序中的多行文本信息 构造方法 创建一个初始文本串为 str 的文本域对象 TextArea(String str) 将文本框对象的回显字符设为 ch,, 常用于密码接收场合 创建 numlines 行 numchars 列的文本域对象 TextArea(int numlines, int numchars) 创建一个初始文本串为 str numlines 行 numchars 列的文本域对象 TextArea(String str, int numlines, int numchars)

主要方法 settext(string s) 将文本域对象的文本信息设置为 str gettext() 返回文本域对象的文本信息 示例 :

复选框与单选按钮 简介 复选框又称为检测盒, 用 Checkbox 类的对象表示,Checkbox 由一个方形的选择区和一个标签组成, 有选中 (check) 和未选中 (uncheck) 两种状态 单独的 Checkbox 实现的是复选框功能, 当多个 Checkbox 加入到一个 CheckboxGroup 组件内时, 选择区变成圆形, 组件内的 Checkbox 只能有一个被选中, 此时实现的是单选按钮的功能 复选框和单选框使用 ItemListener 来监听 ItemEvent 事件 构造方法 创建一个标签为 str 的复选框 Checkbox(String str) 创建一个标签为 str 的单选按钮,g 指明所属的 CheckboxGroup Checkbox(String str, CheckboxGroup g, boolean state)

主要方法 getstate() 返回 Checkbox 对象的状态是否被选中 setstatechange() 获取 Checkbox 对象的当前状态 setstate(boolean state) 设置 Checkbox 对象的状态

Choice 下拉列表 简介 提供一个弹出式的菜单让用户选择, 也是 多选一 的输入界面 与单选按钮组利用单选按钮把所有选项列出的方法不同, 下拉列表的所有选项被折叠起来, 在这个菜单折叠时只显示最前面的或是用户选定的那一项 下拉列表节省显示空间, 适用于大量选项的情形 Choice 用 ItemListener 接口来监听 构造方法 创建一个空白的下拉列表 Choice()

主要方法 additem(string item) add(string item) List 列表 简介 把所有供用户选择的项都显示出来以供选择 列表可以实现多选, 支持滚动条, 可以同时浏览多项 列表可以产生两种事件 : 添加一个 item 字符串到 Choice 对象中将新选项 item 加载当前下拉列表的最后 getselectedindex() 返回被选中的选项的序号 (0~n-1) getitem(int index) 返回 Choice 对象 index 索引项目的字符串 getselecteditem() 返回 Choice 对象所选项目的字符串 removeall() 把下拉列表中的选项全部移除 remove(string item) 把指定标签文本的选项移除

当用户单击列表中的某一个选项并选中它时, 将产生 ItemEvent 类的选择事件 ; 当用户双击列表中的某一个选项时, 将产生 ActionEvent 类的动作事件 构造方法 建立行数为 rows 的 List 对象, 参数 b 为真时允许多选 主要方法 List(int rows, boolean b) getselecteditem() 返回 List 对象所选项目的字符串组成的字符串数组 getselectedindex() 返回被选中的选项的序号 (0~n-1) 组成的整数数组 additem(string item, int index) delitem(int index) add(string item) remove(string item) 添加一个 item 字符串到 List 对象的索引 index 处 删除 List 对象 index 处的选项将新选项 item 加载当前列表的最后 把指定标签文本的选项移除

示例 单选复选 import java.awt.*; import java.awt.event.*; public class ChoiceList{ private ChoiceList(){ Frame f = new Frame("Choice and List"); f.setlayout(new GridLayout(2,3,25,25)); Choice ch = new Choice(); ch.additem("male"); ch.additem("female"); f.add(ch); List l=new List(3,true); l.additem("tennis"); l.additem("football"); l.additem("swimming"); f.add(l); f.setsize(250,150); f.setvisible(true); } public static void main(string args[]){ ChoiceList cl = new ChoiceList(); } }

Dialog 对话框 简介 对话框与框架类似, 是有边框 有标题而独立存在的容器 通常起到与用户交互的对话窗口的作用 对话框不能作为程序的最外层容器, 也不能包含菜单栏, 它必须隶属于某个框架并由该框架负责弹出 对话框可以被设置为模式窗口, 其特点是总是在激活窗口的最前面, 即若是不关闭, 则不能对其他窗口进行操作 构造方法 创建没有标题的对话框,Owner 表示所有者 Dialog(Frame Owner) 创建有指定标题 title 的对话框 Dialog(Frame Owner, String title) 创建指定标题的对话框并指明是否为模式窗口 School of Computer Dialog(Frame Science and Owner, Technology String title, boolean model)

主要方法 settitle(string title) 示例 将对话框对象的标题设置为 title gettitle() 返回对话框对象的标题 setvisible(boolean f) 设置对话框对象的标题是否显示 setmodel(boolean f) 设置对话框模式是否为模式窗口

Canvas 画布 画布代表屏幕上一块空白的矩形区域, 它不是容器, 而是一个可以在这里绘画 捕捉用户操作 产生相应事件的区域

3. 事件处理机制 事件处理基础 事件及其处理机制 GUI 的两大任务 创建窗口并在窗口中添加各种组件, 规划组件在窗口中的位置和相关属性, 构成 GUI 的外观效果 ; 设置各类组件对不同事件的响应, 从而执行用户在用户界面所实施的交互行为, 如果用户在用户界面执行了一个动作, 这将导致一个事件的发生 事件是描述用户所执行的一个操作 所产生的一个行为, 主要涉及以下三个概念 : 事件 (Event): 用来描述在用户界面的用户交互行为所产生的一种效果 ; 事件源 (Event Source): 产生事件的组件对象 ; 事件处理方法 (Event Handler): 负责解析处理事件的类对象, 用以实现和用户交互的方法

事件的类层次 事件处理方法主要基于 事件授权模型 (EDM: Event Delegation Model) 的处理机制, 实现定义多种事件类型 事件源拥有自己的方法, 通过它可以向其注册事件监听器 事件监听器是一个实例, 当事件源产生一个事件后, 事件源就会通知相应的事件监听器, 根据事件对象内封装的消息决定如何响应该事件 一个事件源可以注册一个或多个监听器, 一个监听器也可以被注册到多个事件源

事件的接口及方法 ActionEvent 行为 : 点击按钮 文本框 列表及选择菜单等 接口名 :ActionListener 注册方法 : addactionlistener(actionlistener Listener) 监听器接口所提供的事件方法 : actionperformed(actionevent e) ItemEvent 行为 : 点击复选框选择框列表及带复选框的菜单项等 接口名 :ItemListener 注册方法 : additemlistener(itemlistener Listener) 监听器接口所提供的事件方法 itemstatechanged(itemevent e) KeyEvent 行为 : 按下或释放键盘

接口名 :KeyListener 注册方法 : addkeylistener(keylistener Listener) 监听器接口所提供的事件方法 keypressed(keyevent e) keyreleased(keyevent e) keytyped(keyevent e) getmodified() MouseEvent 行为 : 鼠标单击或鼠标移动 接口名 :» 鼠标单击 :MouseListener» 鼠标移动 :MouseMotionListener 注册方法 :» 鼠标单击 :» 鼠标移动 : addmouselistener(mouselistener Listener) addmousemotionlistener(mousemotionlistener Listener)

监听器接口所提供的事件方法 :» 鼠标单击» 鼠标移动 WindowEvent mousepressed(mouseevent e) mousereleased(mouseevent e) mouseentered (MouseEvent e) mouseexited(mouseevent e) mouseclicked(mouseevent e) mousemoved(mouseevent e) mousedragged(mouseevent e) 行为 : 激活 打开 关闭窗口或窗口失去焦点及收到窗口级事件 接口名 :WindowListener 注册方法 : addwindowlistener(windowlistener Listener)

监听器接口所提供的事件方法 : windowclosing(windowevent e) windowclosed(windowevent e) windowopened(windowevent e) windowiconified(windowevent e) windowdeiconified(windowevent e) windowactivated(windowevent e) windowdeactivated(windowevent e) TextEvent 行为 : 文本框 文本域发生改变 接口名 :TextListener 注册方法 : addtextlistener(textlistener Listener) 监听器接口所提供的事件方法 : textvaluechanged(textevent e)

FocusEvent 行为 : 组件获得或失去焦点 接口名 :FocusListener 注册方法 : addfocuslistener(focuslistener Listener) 监听器接口所提供的事件方法 : FocusGained(FocusEvent e) FocusLost(FocusEvent e) ComponentEvent 行为 : 移动 隐藏 显示组件和改变组件大小等 接口名 :ComponentListener 注册方法 : addcomponentlistener( 监听者 ) 监听器接口所提供的事件方法 : ComponentMoved(ComponentEvent e) ComponentHidden(ComponentEvent e) ComponentResized(ComponentEvent e) ComponentShown(ComponentEvent e)

ContainerEvent 行为 : 添加 移动组件等 接口名 :ContainerListener 注册方法 : addcontainerlistener( 监听者 ) 监听器接口所提供的事件方法 : ContainerAdded(ContainerEvent e) ContainerRemoved(ContainerEvent e) AdjustmentEvent 行为 : 调节滚动条或滑块等 接口名 :AdjustmentListener 注册方法 : addadjustmentlistener( 监听者 ) 监听器接口所提供的事件方法 : AdjustmentValueChange(AdjustmentEvent e)

Java 针对大多数事件监听器接口定义了相应的实现类来实现接口中的所有方法 事件处理主要步骤 步骤 : 选择组件作为事件源, 不同类型的组件会产生特定类型的事件, 假设该事件类型为 XXXEvent; 定义要接收并处理某种类型的事件, 注册相应的事件监听器类, 通过调用组件方法向组件注册事件监听器 eventsourceobject.addxxxlistener(xxxlistener Listener); 实现 XXXListener 类的实例对象, 据此可作为事件的监听器对象 监听器的注册与注销如下 : public void addxxxlistener(xxxlistener listener); public void removexxxlistener(xxxlistener listener);

事件源通过实例化事件类激发并产生事件, 事件将被传送给已注册的一个或多个监听器 监听器在接收到激发事件信号后负责实现相应的事件处理方法 以按钮组件作为事件源的简单范例 选择按钮组件作为事件源 : 定义要接受并处理的事件 ActionEvent, 通过下面的语句注册事件监听器 : 按下按钮组件 bton 对象会产生一个 ActionEvent 实例对象, 事件源通过实例化事件类激发事件并传送给已注册的监听器 ; 监听器对象 listener 所属的类 MyActionListener 需通过方法 actionperformed 实现相应的接口以响应事件 :

键盘事件 KeyEvent 类在 java.awt.event 包中, 提供的主要方法 : getkeychar(): 判断被按下的键的字符 ; getkeycode(): 判断哪个键被按下 点击或释放并获取其键码值 Java 语言的部分键码表 VK_CANCEL/CLEAR/COMMA VK_UNMPAD0~VK_UNMPAD9 VK_LEFT/RIGHT/UP/DOWN 键码键键码 VK_KP_LEFT/RIGHT/UP/DOWN VK_BACK_SLASH/QUOTE VK_ALT/CONTROL/SHIFT/ESCAPE VK_SEMICOLON/PERIOD/SLASH 取消 / 清除 / 逗号 VK_F1~VK_F2 F1~F12 小键盘 0~9 VK_0~VK_9 0~9 左右上下键 小键盘左右上下键 \ / 单引号 Alt/Ctrl/Shift/Esc 分号 / 点 / / VK_A~VK_Z VK_HOME/END VK_CAPS_LOCK VK_NUM_LOCK VK_SPACE/TAB VK_OPEN/CLOSE_BRACKET [/] VK_QUOTE VK_INSERT/DELETE/ENTER/PAUS E 插入 / 删除 / 回车 / 暂停 VK_PAGE_UP/DOWN a~z HOME/END 大写锁定 数字锁定 空格 / 制表符 单引号 前后翻页 键

简单键盘事件的使用 组件使用 addkeylistener() 方法获得监视器 监视器是一个对象, 创建该对象的类必然通过以下三种方法来实现接口 : public void keypressed(keyevent e);» 按下键盘上的某个键 public void keytyped(keyevent e);» 当键被按下又释放 public void KeyReleased(KeyEvente);» 释放键盘上的某个键 示例 : 将键盘输入字符的键码 名称和按键显示出来 设置用来显示的面板 :

注册键盘事件监听器 允许面板获得焦点 对键盘事件进行响应 ( 即实现接口方法 ) public void keypressed(keyevent e){ KeyInputCode=e.getKeyCode(); } public void keyreleased(keyevent e){ KeyInputCode = e.getkeycode(); KeyText = e.getkeytext(keyinputcode); if(!ischar){ KeyChar=' '; } ischar=false; repaint(); } public void keytyped(keyevent e){ KeyChar = e.getkeychar(); ischar = true; }

键盘释放时重绘窗口 : 将 KeyPanel 实例加入到容器中 :

复合键盘事件的使用 KeyEvent 类对象可调用 getmodifiers() 方法返回以下整数值 : CTRL_MASK ALT_MASK SHIFT_MASK 以上是 InputEvent 类的类常量, 根据返回值对复合键事件做处理 当使用 Ctrl+C 复合键时, 下面的逻辑表达式为真 : 示例 : 利用对组合键事件的响应来处理复制 剪切与粘贴 对复制 剪切 粘贴的处理

窗口组件安放 :

文本事件 TextArea 或 TextField 信息发生改变时会触发 TextEvent 事件 需要在程序中将 TextEvent 事件注册给监听器 TextListener, 并实现 TextListener 接口中的 textvaluechanged 方法 示例 : 改变 TextArea 中的文字, 并在标签中回显 安放组件, 并注册监听器 :

响应文本事件 ( 即实现接口方法 )

鼠标事件 MouseListener 触发鼠标事件的四种操作 : 鼠标指针进入组件或退出组件»mouseEntered(MouseEvent e)»mouseexited(mouseevent e) 鼠标指针停留在组件上时按下鼠标»mousePressed(MouseEvent e) 鼠标指针停留在组件上时释放鼠标»mouseReleased(MouseEvent e) 鼠标指针停留在组件上时单击或连续单击鼠标»mouseClicked(MouseEvent e) MouseMotionListener 触发鼠标事件的两种操作 : 在组件上拖动鼠标指针

»mousedragged(mouseevent e) 在组件上运动鼠标指针»mouseMoved(MouseEvent e) 由于处理鼠标事件的接口中的方法较多,Java 提供了相应的适配器类 MouseAdapter 和 MouseMotionAdapter, 据此分别实现了 MouseListener 接口和 MouseMotionListener 获取鼠标的具体信息的方法 : getx() 返回鼠标事件发生时坐标点的 x 值 gety() 返回鼠标事件发生时坐标点的 y 值 getsource() 返回触发当前鼠标事件的事件源 getpointer() 返回鼠标事件发生时的坐标点 (Point 类型 ) getclickcount() 返回鼠标被连续点击的次数 getmodifiers() 如果是鼠标左键触发, 则返回值为 BUTTON1_MASK; ; 如果是鼠标右键触发, 则返回值为 BUTTON3_MASK,, 以上两个整数值都是 InputEvent 中的类常量

示例 : 当鼠标发生事件时在窗口显示事件并给出鼠标位置 处理鼠标事件 ( 即实现接口方法 )

构造窗口 注册监听器

获取鼠标在系统桌面上的坐标 PointerInfo 类可以帮助程序获得鼠标指针在系统图形设备中的位置坐标 PointerInfo 类中的类方法 : getpointerinfo(): 可通过以下语句实例化一个 PointerInfo 对象 getlocation(): 返回一个 Point 对象, 对象通过调用 getx() 和 gety() 方法返回鼠标在桌面上的坐标值 当鼠标运动时必须及时更新 PointerInfo 对象, 因为 PointerInfo 对象中存储的 Point 对象不会自动更新 弹出式菜单 通过 JPopupMenu 类负责创建 构造无标题弹出式菜单 public JpopupMenu()

构造由参数 label 指定标题的弹出式菜单 public JpopupMenu(String label) 设置弹出式菜单在组件上的弹出位置 : 窗口事件 当一个窗口 (Frame 或 JFrame) 被激活 撤销 打开 关闭 图标化等操作时, 会引发 WindowEvent 事件 方法 getwindow() 用来获取发生窗口事件的窗口 触发窗口事件 当单击窗口的图标化按钮时, 监视器要调用以下两种方法 : WindowIconified() WindowDeactivated() 当撤销窗口图标化时, 监视器要调用以下两种方法 : WindowDeiconified() WindowActivated()

示例

焦点事件 组件对象可以触发焦点事件, 当组件具有焦点监视器后, 如果组件从无输入焦点变成有输入焦点时, 或从有输入焦点变成无输入焦点, 都会触发 FocusEvent 事件 方法 获得输入焦点 组件从无输入焦点变成有输入焦点时实现的接口方法 FocusGained(FocusEvent e) 组件从有输入焦点变成无输入焦点时实现的接口方法 FocusLost(FocusEvente) 示例 : 在窗口中安放两个组件, 检测对焦点事件的响应

事件适配器 Java 针对大多数事件监听器接口定义了相应的已经实现了接口功能的实现类 : 事件适配器类 宗旨是使监听器的创建变得更加简便 适配器中系统自动实现相应监听器接口中的所有方法 ( 只写出空方法体 ), 但不做任何事情 编程时定义继承事件适配器类的监听器, 只重写需要的方法 常用的适配器类有 : KeyAdapter: 键盘事件适配器 MouseAdapter: 鼠标事件适配器 MouseMotionAdapter: 鼠标运行事件适配器 WindowAdapter: 窗口事件适配器 FocusAdapter: 焦点事件适配器 ComponentAdapter: 组件事件适配器 ContainerAdapter: 容器事件适配器

示例 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class WinAdapter{ public static void main(string args[]){ Frame f=new Frame("Adapter"); f.addwindowlistener(new MyWindowListener()); f.setlayout(new FlowLayout()); f.setbounds(150,100,150,150); f.setbackground(color.pink); f.setvisible(true); } } class MyWindowListener extends WindowAdapter{ public void windowclosing(windowevent e){ System.exit(0); } }