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

Size: px
Start display at page:

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

Transcription

1 第 4 章图形用户界面设计 图形用户界面为用户和程序的友好交互提供了一种机制, 是软件开发的一项非常重要的工作 本章将详细介绍如何使用 Java 语言编写图形界面, 通过引导一步一步创建图形界面程序, 读者不需要深入了解每一步骤的原理, 只要能按照步骤创建程序即可 通过示例程序的学习, 了解创建示例程序的过程, 对图形界面有一个总体的认识 图形用户界面概述 Applet 类 HTML 文件参数传递 Java 绘图 字体及颜色处理 框架与面板 按钮 标签 文本框与文本区域 事件处理机制 布局设计 菜单设计 对话框设计 常用 Swing 组件简介 4.1 图形用户界面概述 在传统的操作系统 MS-DOS 文字模式下, 屏幕上显示的是单调的文字, 使用者必须通过键盘输入指令才能操作计算机 图形用户界面或图形用户接口 (Graphical User Interface,GUI) 是指采用图形方式, 借助菜单 按钮等标准界面元素, 用户可以通过鼠标等外设向计算机系统发出指令 启动操作, 并将系统运行的结果同样以图形方式显示给用户的技术 GUI 是事件驱动的, 常见交互包括移动鼠标 单击鼠标按钮 在文字段输入 从菜单选择一个选项以及关闭一个窗口等 随着操作系统向图形化方向的发展, 各种编程语言也随之纷纷实现 GUI 接口, 支持用户的 GUI 编程 下面对 Java 语言的 GUI 发展作一简介 在 Java 1.0 刚问世时, 包含一个用于基本 GUI 程序设计的类库,Sun 将它称为抽象窗口工具箱 (Abstract Window Toolkit,AWT) AWT 库将处理用户界面元素的任务委派给每个目标平台 (Windows Solaris Macintosh 等 ) 的本地 GUI 工具箱, 由本地 GUI 工具箱负责用户界

2 第 4 章图形用户界面设计 69 面元素的创建和操作 从理论上说, 程序可以运行在任何平台上, 其体验 (look and feel) 的效果依赖于目标平台, 当时,Sun 公司的口号是 一次编写, 到处运行 但遗憾的是, 使用 AWT 构建的 GUI 应用程序看起来没有 Windows 或 Macintosh 应用程序显示得那么漂亮, 也没有提供那些平台用户所熟悉的功能 更为糟糕的是, 在不同平台上的 AWT 用户界面库中存在着不同的 bug, 研发人员必须在每一个平台上测试他们的应用程序, 因此人们嘲弄 AWT 为 一次编写, 到处调试 目前,AWT 已基本淘汰 从 Java 1.2 版开始,Sun 公司推出了新的图形界面工具包 :Swing Swing 的本意是 秋千, 摇摆 等意思, 和图形用户界面之间没有任何关系, 实际上, 它是 Sun 公司在开发这个新的图形用户界面项目的工程代号, 并无特别含义 相应的工具包都以 Swing 来命名, 例如 javax.swing javax.swing.event 相对 AWT 而言,Swing 更为轻便, 更容易编程, 而且功能也更为灵活 强大, 是 Java 基础类 (Java Foundation Classes,JFC) 的主要组成部分, 它包括以下几个部分 : (1)Swing 组件 : 提供了图形界面所需的所有组件, 从框架 对话框直到按钮 标签等 (2) 界面风格 : 可以让 GUI 程序选择不同的风格, 比如 Java 风格 Mac 风格 Windows 风格等, 每种风格的外观都不一样 (3) 辅助技术 : 可以让辅助阅读器顺利读取信息 (4)Java 2D 编程接口 : 让开发人员方便地产生高质量的二维平面文字 图形和图像 (5) 拖放支持 : 提供了 Java 程序和本机系统应用程序之间的拖放支持 当 Eclipse.org 社区人员开始构建 Eclipse 时, 他们意识到 Swing 和 AWT 都存在不足, 他们决定构建一套新的 GUI 开发工具包, 用来显示 Eclipse 界面 这个工具包借用了 VisualAge SmallTalk 中的大量的库 他们把这个新的工具包命名为 SWT(Standard Widget Toolkit) 意识到本地行为需要本地窗口部件,SWT 的设计者们采用了 AWT 的对等架构, 而仅仅当本地组件不存在时 ( 例如 Motif 下的树形组件 ), 才求助于 Java 实现 这样,SWT 吸收了 AWT 和 Swing 实现的最好的部分 : 当可以得到本地组件时使用本地实现, 当不能得到本地组件时使用 Java 实现 这就同时保证了与本地窗口部件相当的外观和响应度 SWT 于 2001 年与 Eclipse IDE(Integrated Development Environment) 一起集成发布 带有本地操作系统观感的 UI 组件如图 4.1 所示 图 4.1 本地操作系统观感的 UI 组件虽然 SWT 很强大, 但它比较底层, 一些功能在使用上较低级, 不太符合面向对象的特征 因此, 在 SWT 的基础上又开发了 JFace JFace 在 SWT 上进行了一定的扩展, 它提供了 SWT 的功能和更简易的 MVC 模式 SWT 使用直接的 API 提供了原生的窗口部件, 例如, 创建一个 table 部件并且插入想显示的行和列的数据 JFace 则提供了在 SWT 基础之上的抽象层, 所以可以对抽象层编程, 然后抽象层与 SWT API 交互来替代直接对 SWT API 编程 SWT 和 JFace 代表了 Java 在 GUI 上的最新方向, 有兴趣的读者可以通过网络, 对此作更深入的了解

3 70 Java 语言程序设计案例教程 4.2 Applet 类 Java Applet 是用 Java 语言编写的一些小应用程序 这些程序是直接嵌入到页面中 可以 由支持 Java 的浏览器解释执行或用 appletviewer 来运行 或在支持 Java 的浏览器上运行 它 可以大大提高 Web 页面的交互能力和动态执行能力 人机交互友好 同时还能处理图像 声 音 动画等多媒体数据 当用户访问这样的网页时 Applet 被下载到用户的计算机上执行 由于 Applet 是在用户 的计算机上执行的 所以它的执行速度不受网络带宽的限制 用户可以更好地欣赏网页上 Applet 产生的多媒体效果 Applet 小应用程序的实现主要依靠 java.applet 包中的 Applet 类 与一般的应用程序不同 Applet 应用程序必须嵌入在 HTML 页面中 才能得到解释执行 同时 Applet 可以从 Web 页面 中获得参数 并和 Web 页面进行交互 Applet 类 Applet 类是所有 Applet 应用的基类 所有的 Java 小应用程序都必须继承该类 如下所示 import java. applet.*; public class OurApplet extends Applet { Applet 类的构造函数只有一种 即 public Applet() 建立 Applet 小应用程序 如下例所示 例 4.1 用 Applet 小应用程序输出字符串 hello world import java.applet.*; import java.awt.*; public class MyApplet extends Applet { String s; public void init() { s = "hello world"; public void paint(graphics g) { g.drawstring(s, 70, 80); Eclipse 界面如图 4.2 所示 在 Eclipse 中运行 采取如下方法 右击源文件 在弹出菜单中选择 Run As / Java Applet 如图 4.3 所示

4 第 4 章图形用户界面设计 71 图 4.2 建立 Applet 小应用程序 图 4.3 在 Eclipse 中运行 Applet 小程序 小程序查看器界面如图 4.4 所示 图 4.4 小程序查看器运行界面

5 72 Java 语言程序设计案例教程 注意 在 Eclipse 中运行时可能会出现如下的警告 : 警告 : 不能读取 appletviewer 的属性文件 : C:\Documents and Settings\Administrator\.hotjava\properties 使用默认值 解决方法如下 : (1) 打开命令提示窗口 (2) 输入 PolicyTool 并按 Enter 键 (3) 在规则工具对话框中, 单击添加规则项目按钮 (4) 单击 Add Permission 按钮 ( 添加权限 ) (5) 单击许可下拉菜单, 选择 All Permission (6) 单击 Ok ( 确认 ) (7) 单击 Done ( 完成 ) (8) 从 File 菜单中选择 Save as (9) 在 C:\Documents and Settings\Administrator( 当前操作系统用户名 )\ 中保存.java.policy 文件 ( 这个要根据情况来如果没有.java.policy 文件, 开始会弹出个提示说是在什么地方找不到.java.policy, 就把它存在提示的那个目录下面 ) 也可以在 DOS 窗口 ( 命令提示符下 ) 中编译运行 Applet 小应用程序, 步骤如下 : (1) 建立 MyApplet.java 源文件 (2) 编译源文件, 在 DOS 窗口 ( 命令提示符下 ) 中运行 javac MyApplet.java, 如果没有 错误, 编译后会生成 MyApplet.class 字节码文件 (3) 建立一个 html 文件 testapplet.html, 内容如下 : <html> <applet code=myapplet.class width=200 height=200> </applet> </html> (4) 在 DOS 窗口中运行 appletviewer testapplet.html Applet 的生命周期 Applet 根据执行过程中发生的事件来定义其生命周期, 如图 4.5 所示, 对于每个事件将自 动调用一种方法, 方法如下 : (1)init() 方法 这个方法主要是为 Applet 的正常运行做一些初始化工作 当一个 Applet 被系统调用时, 系统首先自动调用该方法, 只执行一次 通常可以在该方法中完成从网页向 Applet 传递参数, 添加用户界面的基本组件等操作 (2)start() 方法 系统在调用完 init() 方法之后, 将自动调用 start() 方法 而且, 每当用户离开包含该 Applet 的主页后又再返回时, 系统又会再执行一遍 start() 方法 这就意味着 start() 方法可以被多次执 行, 而不像 init() 方法 因此, 可把只希望执行一次的代码放在 init() 方法中 可以在 start() 方 法中开始一个线程, 如继续一个动画 声音等 (3)stop() 方法

6 第 4 章图形用户界面设计 73 图 4.5 Applet 的生命周期 这个方法在用户离开 Applet 所在页面时执行, 因此, 它也是可以被多次执行的 它可以 在用户并不注意 Applet 的时候, 停止一些耗用系统资源的工作, 以免影响系统的运行速度, 且并不需要人为地去调用该方法 如果 Applet 中不包含动画 声音等程序, 通常也不必实现 该方法 (4)destroy() 方法 与对象的 finalize() 方法不同,Java 在浏览器关闭的时候才调用该方法 Applet 是嵌在 HTML 文件中的, 所以 destroy() 方法不关心何时 Applet 被关闭, 它在浏览器关闭的时候自动 执行 在 destroy() 方法中一般可以要求收回占用的非内存独立资源 如果在 Applet 仍在运行 时浏览器被关闭, 系统将先执行 stop() 方法, 再执行 destroy() 方法 需要注意的是 paint() 方法虽不在生命周期内, 但它的作用却是 Applet 的灵魂 在网页中与用户的动态交互是 Java 吸引人的原因之一, 用户可以通过鼠标或键盘与 Java Applet 程序对话 下面通过一个例子来演示 Applet 对鼠标和键盘响应, 要注意的是 Java 并不 区分鼠标的左右键 例 4.2 用 Applet 演示分别对鼠标和键盘按下 松开的响应示例 import java.awt.*; import java.applet.*; public class MouseAndKeyBord extends Applet { String text=""; public void paint(graphics g) { g.drawstring(text,20,20); public boolean mousedown(event evt,int x,int y) // 鼠标按下处理函数 { text="mouse Down"; repaint(); return true;

7 74 Java 语言程序设计案例教程 public boolean mouseup(event evt,int x,int y) { text=""; repaint(); return true; public boolean keydown(event evt,int x) { text="key Down"; repaint(); return true; public boolean keyup(event evt,int x) { text=""; repaint(); return true; // 鼠标松开处理函数 // 键盘被按下的处理函数 // 键盘被松开的处理函数 Applet 类常用方法 Applet 类常用方法如下 : (1)public boolean isactive(); 判断一个 Applet 是否处于活动状态 (2)public URL getdocumentbase(); 检索表示该 Applet 运行的文件目录的对象 (3)public URL getcodebase(); 获取该 Applet 代码的 URL 地址 (4)public String getparameter(string name); 获取该 Applet 由 name 指定参数的值 (5)public AppletContext getappletcontext(); 返回浏览器或小应用程序观察器 (6)public void resize(int width,int height); 调整 Applet 运行的窗口尺寸 (7)public void resize(dimension d); 调整 Applet 运行的窗口尺寸 (8)public void showstatus(string msg); 在浏览器的状态条中显示指定的信息 (9)public Image getimage(url url); 按 url 指定的地址装入图像 (10)public Image getimage(url url,string name); 按 url 指定的地址和文件名加载图像 (11)public AudioClip getaudioclip(url url); 按 url 指定的地址获取声音文件

8 第 4 章图形用户界面设计 75 (12)public AudioClip getaudioclip(url url, String name); 按 url 指定的地址和文件名获取声音 (13)public String getappletinfo(); 返回 Applet 应用有关的作者 版本和版权方面的信息 (14)public String [][]getparameterinfo(); 返回描述 Applet 参数的字符串数组, 该数组通常包含三个字符串 : 参数名 该参数所需值的类型和该参数的说明 (15)public void play(url url); 加载并播放一个 url 指定的音频剪辑 (16)public void destroy(); 撤消 Applet 及其所占用的资源 若该 Applet 是活动的, 则先终止该 Applet 的运行 4.3 HTML 文件参数传递 HTML 是超文本标记语言, 它通过各种各样的标记来编排超文本信息 在 HTML 文档中嵌入 Applet 同样需要使用一组约定好的特殊标记 如 <APPLET> 和 </APPLET> 是嵌入 Applet 的标记, 其中至少需包括三个参数 :code height 和 width 在 <APPLET> 标记中还可以使用其他一些可选的参数 利用 Applet 可以接收从 HTML 中传递过来的参数, 下面对这些参数作一简单说明 1.CODE 标志 CODE 标志指定 Applet 的类名 ;WIDTH 和 HEIGHT 标志指定 Applet 窗口的像素尺寸 在 APPLET 语句里还可使用其他一些标志 2.CODEBASE 标志 CODEBASE 标志指定 Applet 的 URL 地址 Applet 的通用资源定位地址 URL, 它可以是绝对地址, 如 也可以是相对于当前 HTML 所在目录的相对地址, 如 /AppletPath/Name 如果 HTML 文件不指定 CODEBASE 标志, 浏览器将使用和 HTML 文件相同的 URL 3.ALT 标志虽然 Java 在 WWW 上很受欢迎, 但并非所有浏览器都对其提供支持 如果某浏览器无法运行 Java Applet, 那么它在遇到 APPLET 语句时将显示 ALT 标志指定的文本信息 4.ALIGN 标志 ALIGN 标志可用来控制把 Applet 窗口显示在 HTML 文档窗口的什么位置 与 HTML<LMG> 语句一样,ALIGN 标志指定的值可以是 TOP MIDDLE 或 BOTTOM 5.VSPACE 与 HSPACE 标志 VSPACE 和 HSPACE 标志指定浏览器显示在 Applet 窗口周围的水平和竖直空白条的尺寸, 单位为像素 6.NAME 标志 NAME 标志把指定的名字赋予 Applet 的当前实例 当浏览器同时运行两个或多个 Applet 时, 各 Applet 可通过名字相互引用或交换信息 如果忽略 NAME 标志,Applet 的名字将对应于其类名

9 76 Java 语言程序设计案例教程 7.PARAM 标志 通用性是程序设计所追求的目标之一 使用户或者程序员能很方便地使用同一个 Applet 完成不同的任务是通用性的具体表现 从 HTML 文件获取信息是提高 Applet 通用性的一条有 效途径 假设编制了一个把某公司的名字在屏幕上卷动的 Applet 为了使该 Applet 更加通用, 则 可以使该 Applet 从 HTML 文件获取需要卷动的文本信息 这样, 若想显示另一个公司的名字, 用不着修改 Java Applet 本身, 只需修改 HTML 文件即可 PARAM 标志可用来在 HTML 文件里指定参数, 格式如下所示 : PARAM Name="name" Value="Liter" Java Applet 可调用 getparameter() 方法获取 HTML 文件里设置的参数值 Applet 的下载与图形文件一样需要一定的时间, 若干秒后它才能在屏幕上显示出来 等待 的时间则取决于 Applet 的大小和用户的网络连接的速度 一旦下载以后, 它便和本地计算机 上的程序以相同的速度运行了 Applet 在用户的计算机上执行时, 还可以下载其他的资源, 如声音文件 图像文件或更多 的 Java 代码, 有些 Applet 还允许用户进行交互式操作 但这需要重复的链接与下载, 因此速 度很慢, 这是一个亟待解决的问题, 可以想到的一个好办法是采用类似高速缓存的技术, 将每 次下载的文件都临时保存在用户的硬盘上, 虽然第一次使用时花的时间比较多, 但当再次使用 时, 只需直接从硬盘上读取文件而无需再与 Internet 连接, 便可以大大提高性能了 例 4.3 根据从 Web 页中得到的 str 参数值 ( 成绩等级 ), 输出对应的分数段 import java.awt.graphics; import java.applet.applet; public class Grade extends Applet { String str,score; public void init() { str=getparameter("str"); // 得到 Web 页中的 str 参数的值 if(str.equals(" 及格 ")) score="60~70"; else if(str.equals(" 中 ")) score="70~80"; else if(str.equals(" 良 ")) score="80~90"; else if(str.equals(" 优 ")) score="90~100"; public void paint(graphics g) { g.drawstring(str +":"+score,10,25); // 输出分数段 请注意 init() 方法中的 str=getparameter("str") 这条语句, 它可以取得通过网页传过来的参 数, 该参数名称为 str, 现在编写 HTML 文件, 通过该文件向 Applet 传递参数 <HTML>

10 第 4 章图形用户界面设计 77 <HEAD> 在 HTML 中传递 Applet 使用的字符串参数 </HEAD> <HR> <BODY> <APPLET CODE="Grade.class" WIDTH=150 HEIGHT=30> <PARAM NAME="str" VALUE=" 及格 "> </APPLET> <BR><HR> <APPLET CODE="Grade.class" WIDTH=150 HEIGHT=30> <PARAM NAME="str" VALUE=" 中 "> </APPLET> <BR><HR> <APPLET CODE="Grade.class" WIDTH=150 HEIGHT=30> <PARAM NAME="str" VALUE=" 良 "> </APPLET> <BR><HR> <APPLET CODE="Grade.class" WIDTH=150 HEIGHT=30> <PARAM NAME="str" VALUE=" 优 "> </APPLET> </BODY> </HTML> 注意加粗的代码, 这些参数夹在 <APPLET> 和 </APPLET> 之间, 每个参数包含在尖括号中, 以 PARAM 标记开头, 参数名称在 NAME= 中给出, 参数值在 VALUE= 中给出, 参数 值都是字符串 程序运行结果如图 4.6 所示 图 4.6 例 4.3 程序运行结果 4.4 Java 绘图 字体及颜色处理 Java 绘图 Java 在图形处理方面有丰富的类库和方法, 使用这些方法可以便捷地绘图, 基本的绘图方 法包括点 线 矩形和圆等 绘制这些图形要用到 AWT 中的 Graphics 类, 它常用的方法如下 :

11 78 Java 语言程序设计案例教程 (1)drawArc(int x, int y, int width, int height, int startangle, int arcangle) 绘制一个覆盖指定矩形的圆弧或椭圆弧边框 (2)drawLine(int x1, int y1, int x2, int y2) 在此图形上下文的坐标系统中, 使用当前颜色在点 (x1, y1) 和 (x2, y2) 之间画一条线 (3)drawOval(int x, int y, int width, int height) 绘制椭圆的边框 (4)drawPolygon(int[] xpoints, int[] ypoints, int npoints) 绘制一个由 x 和 y 坐标数组定义的闭合多边形 (5)drawPolygon(Polygon p) 绘制由指定的 Polygon 对象定义的多边形边框 (6)drawPolyline(int[] xpoints, int[] ypoints, int npoints) 绘制由 x 和 y 坐标数组定义的一系列连接线 (7)drawRect(int x, int y, int width, int height) 绘制指定矩形的边框 (8)drawRoundRect(int x, int y, int width, int height, int arcwidth, int archeight) 用此图形上下文的当前颜色绘制圆角矩形的边框 (9)drawString(AttributedCharacterIterator iterator, int x, int y) 使用此图形上下文的当前颜色绘制由指定迭代器给定的文本 (10)drawString(String str, int x, int y) 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本 (11)fill3DRect(int x, int y, int width, int height, boolean raised) 绘制一个用当前颜色填充的 3-D 突出显示矩形 (12)fillArc(int x, int y, int width, int height, int startangle, int arcangle) 填充覆盖指定矩形的圆弧或椭圆弧 (13)fillOval(int x, int y, int width, int height) 使用当前颜色填充外接指定矩形框的椭圆 (14)fillPolygon(int[] xpoints, int[] ypoints, int npoints) 填充由 x 和 y 坐标数组定义的闭合多边形 (15)fillPolygon(Polygon p) 用图形上下文的当前颜色填充由指定的 Polygon 对象定义的多边形 (16)fillRect(int x, int y, int width, int height) 填充指定的矩形 (17)fillRoundRect(int x, int y, int width, int height, int arcwidth, int archeight) 用当前颜色填充指定的圆角矩形 (18)getClip() 获取当前的剪贴区域 (19)getClipBounds() 返回当前剪贴区域的边界矩形 (20)getClipBounds(Rectangle r) 返回当前剪贴区域的边界矩形

12 替 (21)getColor() 获取此图形上下文的当前颜色 (22)getFont() 获取当前字体 (23)getFontMetrics() 获取当前字体的字体规格 (24)getFontMetrics(Font f) 获取指定字体的字体规格 (25)hitClip(int x, int y, int width, int height) 如果指定的矩形区域与当前的剪贴区域相交, 则返回 true (26)setClip(int x, int y, int width, int height) 将当前的剪贴区设置为由给定坐标指定的矩形 (27)setClip(Shape clip) 将当前的剪贴区域设置为任意的剪贴形状 (28)setColor(Color c) 将此图形上下文的当前颜色设置为指定颜色 (29)setFont(Font font) 将此图形上下文的字体设置为指定字体 (30)setPaintMode() 第 4 章图形用户界面设计 79 设置此图形上下文的绘图模式, 以便通过此图形上下文中的当前颜色来改写目标 (31)setXORMode(Color c1) 将此图形上下文的绘图模式设置为在此图形上下文的当前颜色和新的指定颜色之间交 (32)toString() 返回表示此 Graphics 对象值的 String 对象 (33)translate(int x, int y) 将图形上下文的原点平移到当前坐标系统中的点 (x, y) Java 中的任何一个图形组件, 小到文本框 标签, 大到一个框架 一个对话框, 都有一 个专门负责显示其界面的方法, 这个方法名称是固定的 :paint(), 它的原型为 : public void paint(graphics g) { 每当组件大小 位置 组件内容发生变化时, 该方法即负责生成新的图形界面显示 由 于该方法可以被子类继承, 因此, 继承的子类有能力修改该方法 如果子类中没有出现该方法, 表示其行为完全继承自父类, 则不管组件中是否添加了新的内容, 是否发生了大小的改变, 是 否发生了位移, 父类都要有一个专门的线程, 来负责描绘变化以后的组件界面 paint 方法由 父类自动维护, 如果子类一旦重载该方法, 必须自己去维护所有的界面显示 在 Java 中提供了一套丰富的工具 AWT, 用来实现容易实现的 平台独立的图形用户 接口 它主要由组件 (components) 容器 (containers) 和布局管理器 (layouts) 三部分组成, 通过事件来表达和处理程序 系统和用户之间的动作与关系

13 80 Java 语言程序设计案例教程 1. 画直线 void drawline(int startx,int starty,int endx,int endy); 四个参数分别为 : 起始点的 x 坐标和 y 坐标以及终点的 x 坐标和 y 坐标, 该方法用于在 起点 (startx,starty) 和终点 (endx,endy) 之间画一条直线 坐标参数是相对的, 它们相对于 左上角的坐标为 (0,0), 以像素为单位, 向右向下延伸, 直线如果超出窗口, 则超出的部分不 会显示, 如图 4.7 所示 X 0,0 x1,y1 x2,y2 Y 例 4.4 画直线示例 //DrawLine.java import java.awt.*; import java.applet.*; 图 4.7 画直线 public class DrawLine extends Applet { public void paint(graphics g) { // 从点 (0,0) 到点 (400,400) 之间画直线 g.drawline(0,0,400,400); // 从点 (0,400) 到点 (400,0) 之间画直线 g.drawline(0,400,400,0); 2. 画矩形 Java 提供了三种画矩形的方式 : (1) 画直角矩形 void drawrect(int x,int y,int width,int height); 绘制一个左上角坐标为 (x,y), 宽为 width, 高为 height 的直角矩形 void fillrect(int x,int y,int width,int height); 绘制一个左上角坐标为 (x,y), 宽为 width, 高为 height 的有填充效果的直角矩形 例 4.5 画矩形示例 //DrawRect.java

14 第 4 章图形用户界面设计 81 import java.awt.*; import java.applet.*; public class DrawRect extends Applet { public void paint(graphics g) { g.drawrect(20,20,100,160); g.fillrect(200,20,100,160); (2) 画圆角矩形 void drawroundrect(int x,int y,int width,int height,int arcwidth,int archeight); 绘制一个左上角坐标为 (x,y), 宽为 width, 高为 height, 在 x 轴方向上圆边半径为 arcwidth, 在 y 轴方向上圆边半径为 archeight 的圆角矩形 void fillroundrect(int x,int y,int width,int height,int arcwidth,int archeight); 绘制一个左上角坐标为 (x,y), 宽为 width, 高为 height, 在 x 轴方向上圆边半径为 arcwidth, 在 y 轴方向上圆边半径为 archeight 的有填充效果的圆角矩形 例 4.6 画圆角矩形示例 //DrawRoundRect.java import java.awt.*; import java.applet.*; public class DrawRoundRect extends Applet { public void paint(graphics g) { g.drawroundrect(20,20,100,160,20,20); g.fillroundrect(200,20,100,160,20,20); (3) 画阴影三维矩形 例 4.7 画三维矩形示例 //Draw3DRect.java import java.awt.*; import java.applet.*; public class Draw3DRect extends Applet { public void paint(graphics g) { // 设置亮灰色颜色, 主要是 3D 效果用此颜色可以比较清楚地看出来 g.setcolor(color.lightgray); g.draw3drect(20,20,100,160,true); g.draw3drect(200,20,100,160,false); 3. 画圆和椭圆 void drawoval(int x,int y,int width,int height); void filloval(int x,int y,int width,int height); 上述两种方法在坐标为 (x,y) 处, 绘制或者填充一个长轴为 width, 短轴为 height 的椭圆 当 长轴 width 与短轴 height 相等时, 椭圆就变成了圆, 所以 Java 并没有专门提供绘制圆的方法 例 4.8 画椭圆和圆示例 //DrawEllipse.java import java.awt.*; import java.applet.*; public class DrawEllipse extends Applet {

15 82 Java 语言程序设计案例教程 public void paint(graphics g) { // 在原点为 (10,10), 半径为 50 画圆 g.drawoval(10,10,50,50); // 在原点为 (100,10), 半径为 50 画填充效果的圆 g.filloval(100,10,50,50); // 在原点为 (190,10), 长轴为 90, 短轴为 30 画椭圆 g.drawoval(190,10,90,30); // 在原点为 (70,90), 长轴为 140, 短轴为 100 画填充效果的椭圆 g.filloval(70,90,140,100); 4. 画弧 void drawarc(int x,int y,int width,int height,int startangle,int endangle); void fillarc(int x,int y,int width,int height,int startangle,int endangle); 弧的绘制方法有 6 个参数 : 起始 x 坐标和 y 坐标, 边界椭圆的长和宽, 开始画弧的角度 startangle 和终止画弧前扫过的角度 endangle 前 4 个参数确定了弧的尺寸和形状, 后 2 个参 数确定弧的端点 ( 起止角度 ), 其值为正表示逆时针方向, 为负表示顺时针方向 例 4.9 画弧示例 //DrawArc.java import java.awt.*; import java.applet.*; public class DrawArc extends Applet { public void paint(graphics g) { // 在原点为 (10,40), 半径为 70, 起始角度为 0 度, 逆时针转 90 度的圆弧 g.drawarc(10, 40, 70, 70, 0, 90); // 在原点为 (100,40), 半径为 70, 起始角度为 0 度, 逆时针转 90 度的圆弧 g.fillarc(100, 40, 70, 70, 0, 90); // 在原点为 (10,100), 长轴为 80, 短轴为 70, 起始角度为 0 度, 顺时针转 90 度的弧 g.drawarc(10, 100, 70, 80, 0, -90); // 在原点为 (100,100), 长轴为 80, 短轴为 70, 起始角度为 0 度, 顺时针转 90 度的填充弧 g.fillarc(100, 100, 70, 80, 0, -90); 5. 画多边形 多边形是不限边数的图形, 而这些边实际上是由一组点连接而成的, 所以绘制多边形需 要一组 (x,y) 坐标对 绘图的原理是从第一个 (x,y) 坐标对开始, 向第二个坐标对画一条直线, 然 后向第三个 (x,y) 坐标对画一条直线, 依次类推, 可以画出多边形 下面有四个方法绘制和填充 多边形 : void drawploygon(int []xpoints,int []ypoints,int numpoints); void drawploygon(polygon polygon); void fillploygon(int []xpoints,int []ypoints,int numpoints); void filldrawploygon(polygon polygon); xpoints 代表 x 坐标的整型数组,yPoints 代表 y 坐标的整型数组,numPoints 代表所有点 数的整数, 当然,x 数组和 y 数组应该具有相同数目的元素 通过规定 Polygon 对象或者 x y 数组值来设置多边形的点 如果起始点和终点不重合, 上述的绘图方法自动将多边形封闭 如 果希望绘制一系列相连的直线, 不需要自动封闭图形, 可以使用 drawpolyline() 方法 例 4.10 画多边形示例

16 第 4 章图形用户界面设计 83 //DrawPolygon.java import java.awt.*; import java.applet.*; public class DrawPolygon extends Applet { public void paint(graphics g) { int xarr[] = { 78,188,194,284,106,116,52 ; int yarr[] = { 66,148,72,140,216,160,212 ; // 获得 (x,y) 坐标对数组的长度 int numpoints=xarr.length; g.drawpolygon( xarr, yarr, numpoints); Java 字体类 一个 Font 类的对象表示了一种字体显示效果, 包括字体类型 字型和字号 下面的语句 用于创建一个 Font 类的对象 : Font MyFont = new Font ("TimesRoman", Font.BOLD, 12 ); MyFont 对应的是 12 磅 TimesRoman 类型的黑体字, 其中指定字型时需要用到 Font 类的 三个常量 :Font.PLAIN Font.BOLD Font.ITALIC Font 类的构造方法如下 : public Font (java.lang.string name, int style, int size) 说明 : name: 本地可获取的字体名称 style: 表示字体样式, 包含 Font.PLAIN Font.BOLD Font.ITALIC 三种, 分别对应普通 体 加粗和斜体 size: 字体的大小 示例 : int style = Font.BOLD; Font font = new Font ("Garamond", style, 11); 注意 可采用一个实用的方法来获取本地可用字体 : GraphicsEnvironment ge=graphicsenvironment.getlocalgraphicsenvironment(); String[] fa=ge.getavailablefontfamilynames(); 这样, 通过从绘图环境中获取到本地可用的字体名数组 程序指定的字体取决于系统所安装的字体库, 如果系统中没有指定的字体的话,Java 会 用默认的字体 ( 通常是 Courier 字体 ) 来代替 可以利用在 java.awt.toolkit 类中提供的 getfontlist() 方法得到当前系统中可用字体库的列表 例 4.11 用不同字体绘制字符串 //DrawText.java import java.awt.*; import java.applet.*; public class DrawText extends Applet { public void paint(graphics g) { // 创建四个字体对象 Font f1 = new Font("TimesRoman", Font.PLAIN, 18); Font f2 = new Font("TimesRoman", Font.BOLD, 20);

17 84 Java 语言程序设计案例教程 Font f3 = new Font("TimesRoman", Font.ITALIC, 22); Font f4 = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 24); // 用 f1 字体绘制字符串 g.setfont(f1); g.drawstring("this is a plain font", 10, 25); // 用 f2 字体绘制字符串 g.setfont(f2); g.drawstring("this is a bold font", 10, 50); // 用 f3 字体绘制字符串 g.setfont(f3); g.drawstring("this is a italic font", 10, 75); // 用 f4 字体绘制字符串 g.setfont(f4); g.drawstring("this is a bold and italic font", 10, 100); 画笔颜色 1. 颜色常识 任何颜色都由三原色组成 (RGB),Java 中支持 24 位彩色, 即红 绿 蓝色分量取值介 于 0~255 之间 下面先了解一个 Java 中的 Color 类 Color 的构造函数 : public Color(int r,int g,int b); 使用举例 : 如果想构造一个灰色对象, 则用下面的句子 : Color gray=new Color(205,205,205); Color 中的常量 : public final static Color black=new Color(0,0,0); public final static Color blue=new Color(0,0,255); 2. 设置画笔颜色语法 g.setcolor(color); //color 是一个 Color 对象 每修改一次颜色, 它影响的就是下面所有的绘图语句, 一直影响到再次碰到 setcolor 函数 才以新的颜色代替 3. 使用 ColorChooser 组件选择颜色 Java 中有一个已经定义好的选色器, 通过简单的语法就可以将该窗口调出来, 从其中选 择自己喜欢的颜色 下面的这个例子就是通过颜色选取器选取颜色, 并将选择到的颜色作为窗 体的背景色 ColorChooser 组件的 showdialog() 方法让用户从弹出的窗口中选择一个颜色, 并 传给 Color 对象 其调用语法如下 : color=jcolorchooser.showdialog(this," 选色 ", color); 第一个参数指定调用选色器的父窗体, 第二个参数指定选色器窗口标题, 最后一个为接 收颜色的颜色对象 例 4.12 用不同颜色绘制字符串 //DrawColor.java import java.awt.*; import java.applet.*; public class DrawColor extends Applet {

18 第 4 章图形用户界面设计 85 public void paint(graphics g) { // 采用系统默认的颜色 ( 黑色 ) g.drawstring("this is a default color", 10, 10); // 设置红色的前景色 g.setcolor(color.red); g.drawstring("this is red color", 10, 40); // 设置绿色的前景色 g.setcolor(color.green); g.drawstring("this is green color", 10, 80); g.drawrect(10, 100, 50, 80); 4.5 框架与面板 框架 (Frame) 框架是 GUI 应用程序的主窗口, 是顶层容器 所谓容器是指能够容纳其他组件的特殊组件, 由于容器也是组件的一种, 因此容器中也能容纳容器 框架可重定义尺寸大小, 能最大化 最小化, 带边框, 可以指定标题 图标和窗口光标 框架可包含菜单, 使用对话框 在 Java 中每个 GUI 程序至少要有一个框架,Applet 有时也会使用框架 在 Java 中,UI 的组成如图 4.8 所示 图 4.8 UI 的组成结构 Frame 的构造方法如下 : (1)Frame(): 构造一个框架, 标题为空, 使用缺省布局管理器 (2)Frame(GraphicsConfiguration gc): 构造一个使用特定图形配置的框架 (3)Frame(String title): 构造一个带标题的框架 (4)Frame(String title, GraphicsConfiguration gc): 构造一个使用特定图形配置带标题的框架 当用 Frame 类的构造函数创建一个框架实例时, 被创建的对象初始是不可见的, 需调用相关的方法进行显示

19 86 Java 语言程序设计案例教程 例 4.13 创建一个框架对象 frame, 设置其大小并显示 //FrameDemo.java import java.awt.*; import java.awt.event.*; public class FrameDemo { public static void main(string[] args) { // 创建一个 Frame 对象, 作为顶层容器对象 Frame frame = new Frame("Application"); // 设置窗口为固定大小 frame.setresizable(false); frame.setsize(300, 150); // 创建监听器对象, 以关闭程序 frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e){ System.exit(0); ); // 显示窗体 frame.setvisible(true); 执行这段程序, 显示的主窗口如图 4.9 所示 图 4.9 例 4.13 程序运行结果 面板 (Panel) 面板不能单独存在, 它必须包含在其他容器内, 而且它是没有外观的, 但它却是十分重 要的容器, 用来实现各种基本组件的组合, 面板中也能放面板 Panel 的构造方法如下 : (1)Panel(): 构造一个空白面板, 使用缺省的布局管理器 FlowLayout (2)Panel(LayoutManager layout): 构造一个指定布局管理器的面板 构造完面板后, 使用面板对象的 add() 方法添加组件即可 例 4.14 创建一个面板对象 panel1, 将它放到主框架对象 frame 中 //FrameDemo.java import java.awt.*; import java.awt.event.*; public class FrameDemo { public static void main(string[] args) { // 创建一个 Frame 对象, 作为顶层容器对象 Frame frame = new Frame("Application"); // 创建一个面板对象, 将它放到主框架

20 第 4 章图形用户界面设计 87 Panel panel1 = new Panel(); frame.add(panel1); // 设置窗口为固定大小 frame.setresizable(false); frame.setsize(300, 150); // 创建监听器对象, 以关闭程序 frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e){ System.exit(0); ); // 显示窗体 frame.setvisible(true); 4.6 按钮 标签 文本框与文本区域 这里的基本组件是指除了容器类及其子类以外,Component 类派生的其他一些具体类, 下 面介绍这些组件, 并使用 Applet 来演示如何生成和使用它们 按钮 (Button) 按钮是一个组件, 它用于在被按下或被按下再释放时启动相应的操作, 按钮可以在声明 的时候用字符来标识 (label), 字符串在显示上总是位于按钮对象的中央, 也可以没有字符串 标识 按钮的构造方法如下 : (1)Button(): 创建一个没有字符串标识的按钮 (2)Button(String name): 创建一个标识为 name 的按钮 Button 类提供的几个主要方法如下 : (1)public void setlabel(string newname): 设置新标识为 newname (2)public String getlabel(): 获得按钮的标识 (3)publc void setenable(boolean b): 设置按钮是否能用,true 为可用,false 为禁用, 这 是 Component 类的方法,Button 类继承使用 例 4.15 创建两个按钮对象 button1 和 button2, 将其添加到当前容器中 //ButtonSample.java import java.awt.*; import java.applet.*; public class ButtonSample extends Applet { public void init() { Button button1=new Button(); Button button2=new Button("second"); button1.setlabel("first"); button1.setenabled(true); button2.setenabled(false); this.add(button1);

21 88 Java 语言程序设计案例教程 this.add(button2); 程序运行结果如图 4.10 所示 图 4.10 例 4.15 程序运行结果 标签 (Label) 标签 (Label) 是最简单的 AWT 组件, 用于在容器中加入文本字符串, 在界面上不能对它 进行操作, 标签的位置可以指定为左 右或中间三种对齐方式 标签类的构造方法如下 : (1)Label(): 声明一个空白标签 (2)Label(String name): 声明一个显示为 name 的标签 (3)Label(String name,int alignment): 声明一个显示为 name 的标签, 对齐方式为 alignment, 取值为 Label.LEFT Label.RIGHT Label.CENTER 这三个常量中的一个 Label 类提供的主要方法如下 : (1)public void settext(string text): 设置标签内容 (2)public void setalignment(int alignment): 设置标签位置 下面是标签应用的小例子 例 4.16 创建三个标签对象 label1 label2 和 label3, 将其添加到当前容器中 //LabelSample.java import java.awt.*; import java.applet.*; public class LabelSample extends Applet { public void init() { Label label1 = new Label(); Label label2 = new Label("second"); Label label3 = new Label("third",Label.RIGHT); label1.settext("first"); label1.setalignment(label.left); label2.setalignment(label.center); add(label1); add(label2); add(label3);

22 第 4 章图形用户界面设计 89 程序运行结果如图 4.11 所示 图 4.11 例 4.16 程序运行结果 注意 由于这里设置了对齐方式, 所以三个标签的添加顺序无所谓, 也就是说, 不管 先添加哪个标签, 后添加哪个, 运行结果都一样 文本框 (TextField) 与文本区域 (TextArea) TextField 是文本框,TextArea 是文本区域, 它们都是 TextComponent 类的子类,TextArea 自动支持滚动条 TextField 的构造方法如下 : (1)TextField(): 声明一个空文本框 (2)TextField(String text): 声明一个文本框, 内容为 text (3)TextField(int length): 声明长度为 length 的文本框 (4)TextField(String text,int length): 声明一个长度为 length, 内容为 text 的文本框 TextField 类提供的主要方法如下 : (1)public void settext(string text): 设置文本区的内容 (2)public void setechochar(char c): 设置显示的响应字符 (3)public void seteditable(boolean): 设置是否能编辑 (4)public void setcolumns(int columns): 设置长度 (5)public String gettext(): 获得文本区所有的内容 (6)public void select(int start,int end): 选择字符位置从 start 到 end 的文本内容 (7)public void selectall(): 选择所有的文本内容 (8)public void getselectedtext(): 获得选择的文本内容 TextArea 的构造方法如下 : (1)TextArea(): 声明一个空文本区 (2)TextArea(int rows,int columns): 声明一个行数为 rows, 列数为 columns 的文本区 (3)TextArea(String text): 声明一个内容为 text 的文本区 (4)TextArea(String text,int rows,int columns): 声明一个内容为 text, 行数为 rows, 列数为 columns 的文本区 (5)TextArea(String text,int rows,int columns, int scrollbars): 声明一个内容为 text, 行数为 rows, 列数为 columns 的文本区 滚动条方式为指定方式, 有以下几种 :

23 90 Java 语言程序设计案例教程 SCROLLBARS_BOTH: 水平和垂直都有滚动条 SCROLLBARS_HORIZONTAL_ONLY: 只有水平滚动条 SCROLLBARS_VERTICAL_ONLY: 只有垂直滚动条 SCROLLBARS_NONE: 没有滚动条 TextArea 类提供的主要方法如下 : (1)public void settext(string text): 设置文本区的内容 (2)public void seteditable(boolean editmode): 设置是否能编辑 (3)public void setcolunms(int columns): 设置列数 (4)public void setrows(int rows): 设置行数 (5)public void appendtext(string text): 添加字符串 (6)public void gettext(): 获得文本区所有的内容 (7)public void select(int start,int end): 选择字符位置从 start 到 end 的文本区 (8)public void selectall(): 选择所有的文本内容 (9)public void getselectedtext(): 获得选择的文本内容 例 4.17 创建两个标签对象 两个文本框对象和一个文本域对象, 将它们添加到当前 容器中 //TextSample.java import java.awt.*; import java.applet.*; public class TextSample extends Applet { public void init() { Label notice1=new Label("please fill in the city you live:"); TextField city=new TextField(10); Label notice2=new Label("please fill in the city your occupation:"); TextField occupation=new TextField(10); TextArea comment=new TextArea ("please give some comment here:",5,30); add(notice1); add(city); add(notice2); add(occupation); add(comment); 程序运行结果如图 4.12 所示 图 4.12 例 4.17 程序运行结果

24 第 4 章图形用户界面设计 事件处理机制 前面简要介绍了 AWT 提供的 GUI 组件和容器, 但是, 有了 GUI 组件还是无法构造一个应用系统的用户界面, 因为这样构造出的图形用户界面是无法与用户交互的, 一个完整的用户界面系统还必须具备事件处理能力 那什么是事件呢? 事件可以简单地认为是发生在应用程序上的用户的一个操作, 当用户和应用程序进行交互时, 就需要用到事件 从 JDK 1.0 到 JDK 1.1,AWT 的事件处理机制有了很大的变化, 从 JDK 1.1 开始,AWT 采用了一种新的事件处理模型 代理事件模型 较 JDK 1.0 中的事件处理模型而言, 新的事件处理模型不仅更为灵活, 而且完全支持 JavaBeans 但是, 这里仍会先介绍 JDK 1.1 以前的事件处理机制, 不仅仅因为这是后面的事件处理模型的基础, 而且仍有很多源码是用 JDK 1.1 以前的版本写的 Java 中的事件主要有组件类事件共 6 大类, 分别是 : (1)ComponentEvent (2)ContainerEvent (3)WindowEvent (4)FocusEvent (5)PaintEvent (6)MouseEvent 它们均是当组件的状态发生变化时产生的动作类事件,Java 中的事件类都包含在 JDK 的 java.awt.event 包中 Java 中的事件体系结构 Java 中的事件体系结构如图 4.13 所示 图 4.13 Java 中的事件体系结构图 AWT 的每个事件都包含若干个域, 从事件域中可以获知这个事件的详细内容 常见事件域如下 : 1.id 事件类型,AWT 中定义了下述事件类型 :

25 92 Java 语言程序设计案例教程 ACTION_EVENT: 用户执行的某种动作 GOT_FOCUS: 获得焦点 KEY_ACTION: 按下功能键 KEY_ACTION_RELEASE: 释放功能键 KEY_PRESS: 按下标准键 KEY_RELEASE: 释放标准键 LIST_DESELECT: 不选列表的某项 LIST_SELECT: 选中列表中的某项 LOAD_FILE: 载入文件 LOSE_FOCUS: 失去焦点 MOUSE_DOWN: 按下鼠标键 MOUSE_DRAG: 拖动鼠标,modifiers 域的 Alt_MASK 给出了鼠标是否按下 MOUSE_ENTER: 鼠标进入组件 MOUSE_EXIT: 鼠标离开组件 MOUSE _MOVE: 鼠标移动, 此时没有按下鼠标键 MOUSE_UP: 释放鼠标 SAVE_FILE: 保存文件 SCROLL_ABSOLUTE: 滚动条拖到某个位置 SCROLL_LINE_DOWN: 滚动条向下移一行 SCROLL_LINE_UP: 滚动条向上移一行 SCROLL_PAGE_DOWN: 滚动条向下移一页 SCROLL_PAGE_UP: 滚动条向上移一页 WINDOW_DEICONIFY: 窗口非图标化 WINDOW_DESTROY: 窗口销毁 WINDOW_EXPOSE: 窗口展开 WINDOW_ICONIFY: 窗口图标化 WINDOW_MOVED: 窗口移动 2.target 事件的作用对象, 即该事件是在哪个组件上发生的 3.when 事件发生时间 4.x.y 事件发生的位置 5.key 键盘事件发生时键入的键值 6.modifiers 事件发生时的功能键值, 指 Alt Ctrl Shift 键的状态 (1)Alt_MASK: 按下了 Alt 键 (2)Ctrl_MASK: 按下了 Ctrl 键 (3)Meta_MASK: 在 UNIX 中按下了 Alt 键

26 (4)Shift_MASK: 按下了 Shift 键 7.arg 事件的其他参数, 根据不同的事件有所不同 第 4 章图形用户界面设计 93 每个事件类都提供了相应的方法以便获得该事件的各种参数和状态 例如 :ActionEvent 类提供下述成员方法 : 字符串 (1)public String getactioncommand(): 获得该事件相关的命令字符串, 例如按钮的标识 (2)public int getmodifiers(): 获得该事件发生时按下的功能键 (3)public String paramstring(): 获得表示该事件的参数字符串 用户编程定义每个特定事件发生时程序应做出何种响应, 这些响应代码会在对应的事件 发生时由系统自动调用 在 JDK 1.0 和以前的版本中, 任何接受和处理事件的类都是 Component 类的子类, 在图形用户界面中, 容器中包含了组件或其他的容器, 事件可能发生在某个组件中, 也可能发生在某个作为容器的窗口中 当一个组件获得一个事件对象时, 可忽略它, 不做任何处理, 这时返回 false, 事件会继续 往上层传递, 也可对该事件进行处理, 处理时调用事件对象提供的方法获得参数进行处理, 处 理完后, 组件可以终止事件向上层传递 若事件处理结果返回 true, 则表明终止事件向上传递 Component 类 Component 类中定义了一系列事件处理方法, 这些方法的返回值均为 boolean 类型, 用以 指明事件是否向上传递 1. 动作处理方法 用来捕捉处理在特定部件中产生的事件 当用户作用于某些组件 ( 如按钮 选择框 菜 单项 滚动条等 ) 时, 产生的事件称为动作 (action),awt 把这类事件交由 action() 方法处理 public boolean action(event evt, Object arg) evt 参数给出当前事件实例, 其中包含了时间的详细信息 arg 参数则是动作所作用的组 件, 值与 evt.arg 相同 2. 键盘事件处理方法 (1)public boolean keydown(event evt, int key ); (2)public boolean keyup(event evt, int key); 其中 key 用来指明按下或释放的键的键值, 与 evt.key 值相同 3. 鼠标事件处理方法 (1) 按下鼠标键 :public boolean mousedown(event evt,int x,int y) (2) 按下鼠标键拖动鼠标 :public boolean mousedrag(event evt,int x,int y) (3) 鼠标进入 Applet:public boolean mouseenter(event evt,int x,int y) (4) 鼠标离开 Applet:public boolean mouseexit(event evt,int x,int y) (5) 移动鼠标 :public boolean mousemove(event evt,int x,int y) (6) 鼠标按钮被释放 :public boolean mouseup(event evt,int x,int y) 传递给事件处理方法的有 3 个参数, 即 evt x 和 y Event 是一个标识事件全部信息的类, (x,y) 是发生鼠标事件的坐标位置 与 evt.x 和 evt.y 相同

27 94 Java 语言程序设计案例教程 4. 通用事件处理方法 public boolean handleevent(event evt) 在类中重写的 action() mouseup() keyup() 等方法实际上是被 handleevent() 方法简单地 调用, 这个方法是组件的事件处理开关, 鼠标 按键 动作等各种事件最先到 handleevent() 方法中, 被分流到各种简单的处理方法, 如 mouseup() 如果对一个组件要重写其 handleevent() 方法, 为了使所有基本事件 ( 鼠标 键盘或动作事 件 ) 都有机会被进行缺省处理, 通常应在处理方法结束处调用父类的 handleevent() 方法 下面的例子演示了如何接受鼠标事件 mousedown 和键盘事件 keydown 例 4.18 鼠标事件 mousedown 和键盘事件 keydown 应用示例 //KeyEvent.java import java.applet.*; import java.awt.*; public class KeyEvent extends Applet { private int posx,posy; // 当前要写的字符的位置 private char[] manykeys; // 记录键入字符的数组 private int keynumber; // 记录键入字符的数目 public KeyEvent(){ public void init() { resize(320,240); posx=10; posy=10; manykeys=new char[100]; keynumber=0; public void desroy() { public void paint(graphics g){ g.drawchars(manykeys,0,keynumber,posx,posy); public void start() { public void stop() { public boolean mousedown(event evt,int x,int y) { // 如果按下了鼠标, 就在鼠标所单击处重新开始打字 // 记下鼠标的位置 posx=x; posy=y; // 清除字符数组 keynumber=0; return true; public boolean mouseup(event evt,int x,int y) { return true; // 当按键是可显示字符时加入该字符并重绘窗口 public boolean keydown(event evt,int nkey) {

28 第 4 章图形用户界面设计 95 if(keynumber<100){ manykeys[keynumber]=(char)nkey; keynumber++; repaint(); return true; 代理事件模型 JDK 1.1 之后的代理事件模型中有 3 个角色 : 事件源 事件和事件监听器 事件处理三者 关系如图 4.14 所示 1. 事件源 图 4.14 代理事件模型 事件源是产生或发出事件的对象 例如, 当单击了图形用户界面上的一个按钮后, 按钮 就会产生一个鼠标按下的事件 此时, 按钮就是事件源 前面提到, 在 JDK 1.0 和以前的版本 中, 任何接受和处理事件的类都是 Component 类的子类, 但在 JDK 1.1 以后就不是这样了, 任 何类都能接受和处理事件, 接受之后, 事件是由事件监听器来管理的 2. 事件 AWT 中定义了各种事件类, 如鼠标事件 (MouseEvent) 和窗口事件 (WindowEvent) 等 3. 事件监听器 在 AWT 中, 事件监听器是 java.awt.event 包中的一类接口, 其中定义了当被监听的事件发 生时, 需要调用的方法 事件监听器用于监听某类事件的发生, 它通过调用事件源 add****** 方法 (****** 代表某类事件监听器 ), 来登记所需监听的事件 当该事件源发出此类事件时, 事件监听器就会得到通知 例如 KeyEvent 相对应的接口 KeyListener: public interface KeyListener extends EventListener { public void keypressed(keyevent ev); public void keyreleased(keyevent ev); public void keytyped(keyevent ev); AWT 的组件类中提供注册和注销监听器的方法 注册监听器 : public void add<listenertype>(<listenertype>listener);

29 96 Java 语言程序设计案例教程 如 : button.addmouselistener(this); 注销监听器 : public void remove<listenertype>(<listenertype>listener); 如 : button.removemouselistener(this); 下面是一些常用的事件监听器 (1)ActionListener:Button List MenuItem TextField 接收 Action_Event 事件 (2)ItemListener:Choice CheckBox 接收 Action_Event 事件, 接收所有的 List_ 事件 (3)FocusListener: 接收 Got_Focus 和 Lost_Focus 事件 (4)KeyListener: 接收所有的 Key_ 事件 (5)MouseMotionListener: 接收 Mouse_Drag 和 Mouse_Move 事件 (6)MouseListener: 接收除了 Mouse_Drag 和 Mouse_Move 以外的所有 Mouse_ 事件 (7)AdjustmentListener: 接收所有的 Scroll_ 事件 (8)WindowListener: 接收所有的 Window_ 事件, 除了 Window_Moved 事件 (9)ComponentListener: 接收 Window_Moved 事件 有了以上的接口, 就可以通过如下 3 个步骤来使用它们接收和管理事件 (1) 为类声明需要的事件监听器接口 和其他的接口声明方法一样 例如 : public class AppletSample extends Applet implements ActionListener 如果该类中需要一个以上的事件监听器, 则可以根据需要声明多个 (2) 为组件登记接口 在代码中, 当生成一个组件作为事件源后, 就需要为这个组件登记该类已经声明过的相 应的事件监听器, 然后再加入该组件, 所有的组件都有这样的登记方法, 方法名的格式为 : add******,****** 是事件监听器的名字 例如 : Button button1=new Button("OK"); button1.addactionlistener(this); add(button1); 这里 addactionlistener 的参数为 this, 表明当组件接收到 Action_Event 事件后, 该类实现 的事件监视器接口就会自动处理这个事件 (3) 最后在类中实现接口声明的处理方法 比如 ActionListener 声明的事件处理方法为 actionperformed(), 在该类中就要实现这个 方法 : public void actionperformed(actionevent event) { // 填写所需代码 4.8 布局设计 我们先看一下图 4.15

30 第 4 章图形用户界面设计 97 图 4.15 常见的五种布局管理器设计方案在该图中, 按钮的个数及功能相同, 但在界面显示上有很大的差异, 这就是布局管理器在起作用, 布局管理器具有如下功能特点 : (1) 布局管理器决定容器中组件的尺寸和位置 (2) 每个容器都有一个缺省的布局管理器 (3) 组件可以提供大小和排列的建议, 但最终大小和位置由布局管理器决定 (4) 所有的 Panel( 面板 ) 对象在缺省状态下都使用 FlowLayout( 流式布局 ) (5) 内容窗格缺省使用 BorderLayout( 边界布局 ), 特点是菜单栏 工具栏的高度固定, 并且可以在界面上随意拖动 AWT 的标准布局管理器有以下五种 : (1)FlowLayout: 该布局管理器将组件从左到右或从上到下放置, 是 Panel 和 Applet 的默认布局管理器 (2)BorderLayout: 该布局管理器将组件分为东 西 南 北 中五个区域, 是 Window Dialog 和 Frame 容器的默认布局管理器 (3)CardLayout: 该布局管理器将加入到容器的组件作为卡片, 把每个组件放置在一个单独的卡片上, 后面的卡片将覆盖前面的卡片, 每次只能看到一张卡片 (4)GridLayout: 该布局管理器将容器分为相同尺寸的网格, 将组件依次放入网格中 (5)GridBagLayout: 该布局管理器将容器分为相同尺寸的网格, 但组件不只是占一个网格, 一个组件可以占多个网格位置 FlowLayout 布局管理器 FlowLayout 型布局管理器对容器中组件进行布局的方式是将组件逐个地安放在容器中的一行上, 一行放满后就另起一个新行 FlowLayout 有三种构造方法 : (1)public FlowLayout() (2)public FlowLayout(int align) (3)public FlowLayout(int align, int hgap, int vgap) 在默认情况下,FlowLayout 将组件居中放置在容器的某一行上,FlowLayout 的构造方法中提供了一个对齐方式的可选项 align,align 可取值有三个 :FlowLayout.LEFT( 左对齐 )

31 98 Java 语言程序设计案例教程 FlowLayout.RIGHT( 右对齐 ) FlowLayout.CENTER( 居中 ) 例 4.19 将三个按钮 button1 button2 和 button3 按 FlowLayout 布局方案放入框架 f 中 //LayoutFlow.java import java.awt.*; import java.awt.event.*; class LayoutFlow { private Frame f; private Button button1, button2, button3; public static void main(string args[]) { LayoutFlow layoutflow = new LayoutFlow(); layoutflow.go(); public void go() { f = new Frame("Flow Layout"); f.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); f.setlayout(new FlowLayout()); button1 = new Button("Ok"); button2 = new Button("Open"); button3 = new Button("Close"); f.add(button1); f.add(button2); f.add(button3); f.setsize(100, 100); f.setvisible(true); 程序运行结果如图 4.16 所示 图 4.16 例 4.19 程序运行结果 BorderLayout 布局管理器 BorderLayout 是 Dialog 类和 Frame 类的默认布局管理器, 它提供了一种较为复杂的组件 布局管理方案, 每个被 BorderLayout 管理的容器均被划分成五个区域 : 东 (East) 南 (South) 西 (West) 北 (North) 中 (Center) North 在容器的上部,East 在容器的右部, 其他依此 类推 Center 当然就是 East South West 和 North 所围绕的中部 域之一 BorderLayout 布局管理器有两种构造方法 : (1)BorderLayout() 构造一个各部分间距为 0 的 BorderLayout 实例 (2)BorderLayout(int, int) 构造一个各部分具有指定间距的 BorderLayout 实例 在 BorderLayout 布局管理器的管理下, 组件必须通过 add() 方法加入到容器的五个命名区 典型的边界型界面如图 4.17 所示 apanel.add(new Button(" 北区按钮 "), BorderLayout.NORTH); apanel.add(new Button(" 南区按钮 "), BorderLayout.SOUTH); apanel.add(new Button(" 西区按钮 "), BorderLayout.WEST);

32 第 4 章图形用户界面设计 99 apanel.add(new Button(" 东区按钮 "), BorderLayout.EAST); 边界型布局的每个区中只能放一个组件, 如果在同一个区内放入第二个组件的话, 后者就会覆盖前者, 可以使用内部容器在 BorderLayout 的一个区域内间接放入多个组件 如果某个区域没有使用, 那么它的大小将变为零, 此时 Center 区域将会扩展并占据这个未用区域的位置, 如图 4.18 所示 图 4.17 典型的边界型布局界面 图 4.18 缺少某个区域的边界型布局界面 实际上, 常用的是上下排列, 或者左右排列两个组件的情况 图 4.19 显示上下排列的边 界型布局和左右排列的边界型布局在调整高度和宽度时的表现 图 4.19 上下排列的边界型布局和左右排列的边界型布局在调整高度和宽度时的布局界面 例 4.20 将五个按钮 be bw bn bs 和 bc 按 BorderLayout 布局方案放入框架 f 中 ///LayoutBorder.java import java.awt.*; import java.awt.event.*; class LayoutBorder { private Frame f; private Button be, bw, bn, bs, bc; public static void main(string args[]) { LayoutBorder layoutborder = new LayoutBorder(); layoutborder.go(); void go() { f = new Frame("Border Layout"); // 创建监听器对象, 以关闭程序 f.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); be = new Button(" 东区 "); bs = new Button(" 南区 "); bw = new Button(" 西区 "); bn = new Button(" 北区 ");

33 100 Java 语言程序设计案例教程 bc = new Button(" 中间区域 "); // 设置布局管理器为 BorderLayout f.setlayout(new BorderLayout(20, 50)); f.add(be, BorderLayout.EAST); f.add(bw, BorderLayout.WEST); f.add(bs, BorderLayout.SOUTH); f.add(bn, BorderLayout.NORTH); f.add(bc, BorderLayout.CENTER); TextField txtfield = new TextField(20); f.add(txtfield); f.setsize(350, 200); f.setvisible(true); 程序运行结果如图 4.20 所示 GridLayout 布局管理器 图 4.20 例 4.20 程序运行结果 GridLayout 是一种网格式的布局管理器, 它将容器空间划分成若干行乘若干列的网格, 组 件依次放入其中, 每个组件占据一格 GridLayout 有三种构造方法 : (1)public GridLayout() (2)public GridLayout(int rows, int cols) (3)public GridLayout(int rows, int cols, int hgap, int vgap) 第一种不带参数的构造方法创建一个只有一行的网格, 网格的列数根据实际需要而定 参数 :rows 和 cols 分别指定网格的行数和列数,hgap 和 vgap 分别表示网格间的水平间距 和垂直间距 如 :new GridLayout(3,2), 可以创建一个三行乘两列的布局管理器 rows 和 cols 中的一个值可以为 0, 但是两个值不能都是 0 如果 rows 为 0, 那么网格的行数将根据实际需要而定 ; 如果 cols 为 0, 那么网格的列数 将根据实际需要而定 例 4.21 将六个按钮 b1 b2 b3 b4 b5 和 b6 按 GridLayout 布局方案放入框架 f 中 //LayoutDemo.java import java.awt.*; import java.awt.event.*; class LayoutGrid { private Frame f; private Button b1,b2,b3,b4,b5,b6; public static void main(string args[]) { LayoutGrid layoutgrid = new LayoutGrid(); layoutgrid.show(); void show() { f = new Frame("Layout example"); //f.setdefaultcloseoperation(jframe.dispose_on_close); // 创建监听器对象, 以关闭程序 f.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) {

34 第 4 章图形用户界面设计 101 System.exit(0); ); // 将布局管理器设置为网格类型 f.setlayout(new GridLayout(0,2,10,20)); f.setsize(300,200); b1 = new Button("b1"); b2 = new Button("b2"); b3 = new Button("b3"); b4 = new Button("b4"); b5 = new Button("b5"); b6 = new Button("b6"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); TextField txtfield = new TextField(30); f.add(txtfield); f.pack(); f.setvisible(true); 运行结果如图 4.21 所示 图 4.21 例 4.21 程序运行结果 CardLayout 布局管理器 CardLayout 是一种卡片式的布局管理器, 卡片式布局是一种非常特殊的布局方式, 它所 管理的不是组件, 而是面板 采用卡片式布局的面板, 会同时拥有若干个与它大小相同的子面 板, 但在界面上每次只显示其中一个子面板 如同摞在一起的卡片一样, 每次只能显示最顶上 的一张 例 4.22 卡片式布局管理器 CardLayout 应用示例 //LayoutCard.java import java.awt.*; import java.awt.event.*; public class LayoutCard { CardLayout cardlay; Panel panel;

35 102 Java 语言程序设计案例教程 Button b1; int cardno = 0; final int NCARDS = 4; String labels[] = new String[NCARDS]; Frame frame; public static void main(string[] args) { LayoutCard layoutcard = new LayoutCard(); layoutcard.go(); void go() { frame = new Frame("Border Layout"); // 创建监听器对象, 以关闭程序 frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); panel = new Panel(); cardlay = new CardLayout(); b1 = new Button("Next"); b1.addactionlistener(new ActionListener() { public void actionperformed(actionevent evt){ if (++cardno >= NCARDS) cardno = 0; cardlay.show(panel, labels[cardno]); ); labels[0] = "Card One"; labels[1] = "Card Two"; labels[2] = "Card Three"; labels[3] = "Card Four"; panel.setlayout(cardlay); for (int i = 0; i < NCARDS; i++) panel.add(labels[i], new Label(labels[i])); cardlay.show(panel, labels[0]); frame.setlayout(new BorderLayout()); frame.add("center",panel); frame.add("south", b1); frame.setsize(200,100); frame.setvisible(true); 程序运行结果如图 4.22 所示 图 4.22 例 4.22 程序运行结果

36 第 4 章图形用户界面设计 GridBagLayout 布局管理器 GridBagLayout 布局是最灵活 最复杂的布局之一, 它比较接近表格型布局, 但远比后者灵活, 可以定制每一格的大小 间隙等 GridBagLayout 的掌握有一定难度, 下面首先通过一个例子来直接演示这种布局的显示效果, 再逐一分析这种效果是怎么做到的 假设程序运行效果如图 4.23 所示 图 4.23 例 4.23 程序运行结果 例 4.23 表格包式布局管理器 GridBagLayout 应用示例 //LayoutGridBag.java import java.awt.*; import java.awt.event.*; public class LayoutGridBag { public static void main(string[] args) { Frame frame = new Frame(" 表格包式布局 "); // 创建监听器对象, 以关闭程序 frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); Panel panel = new Panel(); panel.setlayout(new GridBagLayout()); Button button; GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; button = new Button(" 新建文件 "); c.weightx = 0.5; c.gridx = 0; c.gridy = 0; panel.add(button, c); button = new Button(" 打开 "); c.gridx = 1; c.gridy = 0; panel.add(button, c); button = new Button(" 另存为 "); c.gridx = 2; c.gridy = 0; panel.add(button, c); button = new Button(" 关闭 ( 仅关闭打开的文件, 而非整个程序 )"); c.ipady = 40;

37 104 Java 语言程序设计案例教程 说明 : c.weightx = 0.0; c.gridwidth = 3; c.gridx = 0; c.gridy = 1; panel.add(button, c); button = new Button(" 退出程序 "); c.ipady = 0; c.weighty = 1.0; c.anchor = GridBagConstraints.PAGE_END; c.insets = new Insets(10, 0, 0, 0); c.gridx = 1; c.gridwidth = 2; c.gridy = 2; panel.add(button, c); frame.add(panel); frame.pack(); frame.setvisible(true); 表格包型布局的灵活性主要体现在它可以对每个单元格 每个组件进行配置它需要的表 格包约束 (GridBagConstraints) 类的辅助 这个约束类的作用只有一个, 就是配置每个单元格 里的组件 下面的代码用于在表格包中加入组件 : panel.setlayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); panel.add(component, c); 代码的第一行设置布局管理器为表格包型, 第二行代码产生一个约束对象, 随后对约束 对象进行配置, 最后调用 add 函数添加组件,add 函数的第二个参数为约束对象 c, 组件的配 置信息就存储在约束对象 c 里, 下面针对每个组件的约束对象 c 进行分析 : 新建文件 按钮有 4 个约束 : button = new Button(" 新建文件 "); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; c.gridy = 0; c.weightx = 0.5; panel.add(button, c); fill : 指示当组件的显示区域大于组件尺寸时, 应当怎么办, 缺省值是 NONE, 也就是 说组件大小不变 其值有 HORIZONTAL( 宽度 ), 表示将组件拉宽到与单元格宽度一致, 但 高度不变 VERTICAL( 高度 ), 表示将组件高度提升到与单元格高度一致, 但宽度不变 BOTH ( 同时 ), 表示将组件的高度和宽度都拉伸到与单元格一致 本例中, 这个约束是对所有组件 起作用的 gridx, gridy : 组件所在的单元格位置, 例如 :gridx = 0, gridy = 0, 表示组件位于左 上角的单元格 ;gridx = 1, gridy = 2 表示组件位于第 2 列 第 3 行的单元格 ; 建议对每个组件 都指定它所在的单元格

38 第 4 章图形用户界面设计 105 weightx, weighty : 确定当用户拉大主程序界面时, 各单元格如何分配多余的空间, 这通过单元格的权重 (weight) 来确定, 当用户拉大了窗口的宽度时, 权重为 0 的单元格的宽 度不变, 其他权重大于 0 的单元格按比例分配多出来的宽度 weighty 用于设置单元格高度的 权重, 权重的绝对值不重要, 关键是其相对比例 第 4 个按钮引入了两个新的约束 gridwidth 和 ipady, 下面介绍这两个约束 gridwidth, gridheight : 分别表示这个组件在宽度和高度上分别占用了几个单元格 变量的值表示单元格个数, 而不是像素数 本例中, 由于第 4 个按钮很长, 一个单元格放不下, 因此设 gridwidth = 3, 也就是横向占据 3 个单元格的位置, 但纵向仍然只占据了一个单元格的 位置 ipadx, ipady : 设定组件内部的填充宽度或高度 由于填充是针对两边的, 因此组件 的高度至少应为它的最小高度加上 ipady*2 本例中, 为了提高第 4 个按钮的高度, 同时将字 体居中, 设置它的内部填充高度为 40 第 5 个按钮又引入了两个新的约束 insets 和 anchor, 下面分别介绍 insets : 定义组件的外部填充, 也就是说, 在组件和单元格之间的空隙是多少 外部填 充值是通过一个 Insets 对象来指定的, 它的构造函数的 4 个参数分别是组件顶部 左侧 底部 右侧的填充值 c.insets = new Insets(10,0,0,0); 本例中, 指定第 5 个按钮的顶部与单元格之间有 10 个像素的空隙 anchor : 设定当组件小于单元格时, 应该怎样放置单元格 组件有 9 种放置方式 : (1)FIRST_LINE_START( 左上角 ) (2)PAGE_START( 上部的中间 ) (3)FIRST_LINE_END( 右上角 ) (4)LINE_START( 左侧的中间 ) (5)CENTER( 正中间 ) (6)LINE_END( 右侧的中间 ) (7)LAST_LINE_START( 左下角 ) (8)PAGE_END( 下部的中间 ) (9)LAST_LINE_END( 右下角 ) 9 种放置方式的位置图如图 4.24 所示 图 4.24 组件的 9 种放置方式

39 106 Java 语言程序设计案例教程 在添加组件约束的时候, 如果每个组件都共用一个约束, 那么要注意还原设定值 例如第 4 个按钮设定 ipady 为 40, 但第 5 个按钮不需要设置内部填充, 因此在定义第 5 个按钮的约束时要将 ipady 设为 0, 否则前面定义的约束会一直传给后面的组件 相反, 本例中 fill 属性就从头传到尾, 为所有单元格所用 4.9 菜单设计 菜单是非常重要的 GUI 组件 Java 的菜单组件是由多个类组成的, 其中, java.awt.menucomponent 类是所有菜单类的父类, 它的子类有 :MenuBar( 菜单条 ) Menu( 菜单 ) MenuItem( 菜单子项 ) CheckboxMenuItem( 复选框菜单子项 ) PopupMenu( 弹出菜单 ) 此外, 还有一个用于产生快捷键的类 :MenuShortcut 每个菜单组件都包括一个菜单条, 每个菜单条又包含若干个菜单项, 每个菜单项再包含若干个菜单子项 菜单子项的作用与按钮类似, 当用户单击时产生一个命令动作 Java 中的菜单分为两大类 : 一类是菜单条式菜单, 通常所说的菜单就是这一类 ; 另一类就是弹出式菜单 创建一个菜单的步骤如下 : (1) 创建菜单条 菜单条组件是一个水平菜单 它只能加入到一个框架中, 并成为所有菜单树的根 在一个时刻, 一个框架可以显示一个菜单条 然而, 可以根据程序的状态修改菜单条, 这样, 在不同的时刻就可以显示不同的菜单 一般使用 MenuBar 组件, 菜单条外观如图 4.25 所示 图 4.25 菜单条外观为了将该菜单栏与 Frame 对象关联, 可以调用该框架的 setmenubar 方法 MenuBar 组件只有一种构造方式, 但是它对于构造一个菜单来说是个不可缺少的组件 (2) 创建菜单项, 添加到菜单条中 使用 Menu 组件 Menu 组件是用来存放和整合 MenuItem 的组件, 这个组件也是构成一个菜单不可或缺的组件之一 Menu 可以是单一层次的结构也可以是一个层次式的结构, 要使用何种形式的结构取决于界面设计上的需要而定 (3) 将菜单子项加入到菜单项中, 菜单子项是菜单树的 叶 节点 使用 MenuItem 组件 MenuItem 继承 AbstractButton 类, 可以说 MenuItem 是一种特殊的 Button, 所以 MenuItem 支持许多在 Button 中好用的功能, 例如加入图标文件或是在菜单中选择某一项 MenuItem 时就如同按下按钮的操作一样触发 ActionEvent, 通过 ActionEvent 的机制就能针对不同的 MenuItem 编写其对应的程序段

40 第 4 章图形用户界面设计 107 (4) 将建成的菜单条加入到容器中 (5) 将菜单子项注册给动作事件的监听者 ActionListener (6) 重载监听者的方法 actionperformed(actionevent e) 例 4.24 创建菜单示例 //MenuDemo.java import java.applet.applet; import java.awt.*; import java.awt.event.*; public class MenuDemo extends Frame implements ActionListener { Menu objmenufile; Menu objmenuedit; Label lblmsg; public void init() { setbackground(color.white); buildmenufile(); buildmenuedit(); MenuBar objmenubar = new MenuBar(); setmenubar(objmenubar); objmenubar.add(objmenufile); objmenubar.add(objmenuedit); lblmsg = new Label(" 显示的消息."); add(lblmsg); private void buildmenufile() { MenuItem objmenuitem; objmenufile = new Menu(" 文件 "); objmenuitem = new MenuItem(" 新建 "); objmenuitem.addactionlistener(this); objmenufile.add(objmenuitem); objmenuitem = new MenuItem(" 打开 "); objmenuitem.addactionlistener(this); objmenufile.add(objmenuitem); objmenuitem = new MenuItem(" 保存 "); objmenuitem.addactionlistener(this); objmenufile.add(objmenuitem); objmenuitem = new MenuItem(" 另存为 "); objmenuitem.addactionlistener(this); objmenufile.add(objmenuitem); objmenufile.addseparator(); // 添加水平分割线 objmenuitem = new MenuItem(" 退出 "); objmenuitem.addactionlistener(this); objmenufile.add(objmenuitem); private void buildmenuedit() { MenuItem objmenuitem; objmenuedit = new Menu(" 编辑 "); objmenuitem = new MenuItem(" 撤销 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuitem = new MenuItem(" 重做 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuedit.addseparator(); objmenuitem = new MenuItem(" 剪切 ");

41 108 Java 语言程序设计案例教程 objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuitem = new MenuItem(" 复制 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuitem = new MenuItem(" 粘贴 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuitem = new MenuItem(" 删除 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuedit.addseparator(); objmenuitem = new MenuItem(" 查找 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); objmenuitem = new MenuItem(" 替换 "); objmenuitem.addactionlistener(this); objmenuedit.add(objmenuitem); public void actionperformed(actionevent event) { String strmenuname; strmenuname = event.getactioncommand(); if (strmenuname.equals(" 退出 ")) { System.exit(0); else { lblmsg.settext(strmenuname + " 菜单被选择."); public static void main(string args[]) { MenuDemo objappframe = new MenuDemo(); // 注册监听器 objappframe.addwindowlistener( new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); objappframe.settitle(" 菜单示例 "); objappframe.setsize(760, 378); // 设置窗口的高度和宽度 objappframe.init(); objappframe.setvisible(true); 程序运行结果如图 4.26 所示 图 4.26 例 4.24 程序运行的部分结果

42 第 4 章图形用户界面设计 对话框设计 Dialog 也是一种容器, 其默认的布局管理器是 BorderLayout 有模态和非模态两种, 模 态对话框只让应用程序响应对话框内的事件而其他窗体中的事件则不能响应 ; 而非模态对话框 则可以响应其他窗体中的事件 相关构造方法如下 : (1)Dialog(Dialog owner): 构造一个初始时不可见, 无模态的 Dialog, 带有空标题和指 定的所有者框架 (2)Dialog(Dialog owner, String title): 构造一个初始时不可见 无模态的 Dialog, 带有 指定的所有者和标题 (3)Dialog(Dialog owner, String title, boolean modal): 构造一个初始时不可见的 Dialog, 带有指定的所有者 标题和模态 (4)Dialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc): 构造一个 初始时不可见的 Dialog, 带有指定的所有者 标题 模态和 GraphicsConfiguration (5)Dialog(Frame owner): 构造一个初始时不可见 无模态的 Dialog, 带有空标题和指 定的所有者框架 (6)Dialog(Frame owner, boolean modal): 构造一个初始时不可见的 Dialog, 带有空标题 指定的所有者框架和模态 (7)Dialog(Frame owner, String title): 构造一个初始时不可见 无模态的 Dialog, 带有指 定的所有者框架和标题 (8)Dialog(Frame owner, String title, boolean modal): 构造一个初始时不可见的 Dialog, 带有指定的所有者框架 标题和模态 (9)Dialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc): 构造一个 初始时不可见的 Dialog, 带有指定的所有者框架 标题 模态和 GraphicsConfiguration 例 4.25 创建模态对话框和非模态对话框示例 import java.awt.*; import java.awt.event.*; public class DialogDemo extends Frame { private TextField tfd = new TextField(10); private MyDialog myd = null; public static final String MODE = " 模态 "; public static final String MODELESS = " 非模态 "; public DialogDemo() { Button bt1 = new Button(" 打开模态对话框 "); Button bt2 = new Button(" 打开非模态对话框 "); add(tfd, "North"); add(bt1, "Center"); add(bt2, "East"); bt1.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { getmydialog(mode); ); bt2.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) {

43 110 Java 语言程序设计案例教程 getmydialog(modeless); ); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { dispose(); System.exit(0); ); public MyDialog getmydialog(string mode) { if (MODE.equals(mode)) { myd = new MyDialog(this, " 模态对话框 ", true); myd.setinfo(tfd.gettext()); myd.setvisible(true); tfd.settext(myd.getinfo()); else if (MODELESS.equals(mode)) { myd = new MyDialog(this, " 非模态对话框 ", false); myd.setinfo(tfd.gettext()); myd.setvisible(true); return myd; public void setinfo(string textarea) { tfd.settext(textarea); public static void main(string[] args) { DialogDemo tdg = new DialogDemo(); tdg.setsize(300, 300); tdg.setvisible(true); class MyDialog extends Dialog { private TextField tfd = new TextField(10); private String strinfo = ""; public MyDialog(Frame owner, String title, boolean modal) { super(owner, title, modal); setbounds(0, 0, 200, 150); Button bt1 = new Button(" 应用 "); Button bt2 = new Button(" 确定 "); add(tfd, "North"); add(bt1, "Center"); add(bt2, "East"); if (this.ismodal() == true) { bt1.setenabled(false); bt1.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { ((DialogDemo) MyDialog.this.getOwner()).setInfo(tfd.getText()); ); bt2.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (ismodal() == true) { strinfo = new String(tfd.getText()); else { ((DialogDemo) MyDialog.this.getOwner()).setInfo(tfd.getText());

44 第 4 章图形用户界面设计 111 dispose(); ); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { dispose(); ); public void setinfo(string textarea) { tfd.settext(textarea); public String getinfo() { return tfd.gettext(); 程序运行结果如图 4.27 所示 图 4.27 例 4.25 程序运行结果 4.11 常用 Swing 组件简介 Swing 组件 Swing 组件集是 JFC 提供的一套新的 GUI 工具, 它简化了基于图形界面的窗口系统的开发 Swing 组件是所谓的 轻型 (lightweight) 组件, 因为这些组件同 AWT 中的基于本地对等端的组件 ( 即 heavyweight 组件 ) 不同, 这些组件没有对应的对等端, 即不需要跟操作系统相关的本地 UI 代码 因此, 实现这些组件所需要的代码量更少, 而且减少了在不同平台上运行可能带来的不一致性 此外, 开发人员使用 Swing 可以方便地选择自己需要的 GUI 风格, 即本地的显示风格 统一的 Java 显示风格或用户定制的显示风格 总之, 当开发客户端应用时,Swing 给程序员带来了更多的灵活性和更强大的功能 事实上,Swing 是对 AWT 的扩展, 而并非是 Swing 代替了 AWT, 从体系结构的角度来说,Swing 构筑在 AWT( 并非 AWT 的全部 ) 之上 Swing 位于 JFC 的系列 API 之上, 例如 Java2DAPI Drag&DropAPI 和 accessibility API 因为这些 API 都需要依赖于本地代码来执行一些任务, 而 Swing 组件是不依赖于本地对等端的, 所以,Java2DAPI Drag&DropAPI 和

45 112 Java 语言程序设计案例教程 accessibilityapi 都是 JFC 的组成部分, 同时也是 AWT 的组成部分, 但是它们不属于 Swing, 如图 4.28 所示 型 图 4.28 Swing 和 AWT 的关系 Swing 提供了一套丰富的 轻型 GUI 组件, 定义在 javax.swing 包中 组件涵盖了 AWT 中业已提供的 GUI 组件, 这些组件的类名就是 AWT 的组件类名加上前缀 J 此外, 为了满足商业化桌面应用的需求, 同时简化应用的开发和部署,Swing 还定义了一套新的高层次的 GUI 组件 其中, 基本 GUI 组件新增加了 JTable JTree JSlide JProgressbar JToolTip 以及 JFileChooser 和 JColorChooser, 并将 Choise 组件更名为大家熟悉的 JComboBox, 如图 4.29 所示 ; 而容器组件则新增加了 JSplitPane JTabbedPane JToolBar JInternalFrame 和 JLayeredPane 图 4.29 JComboBox 组件 Swing 组件, 无论是基本组件还是容器组件, 都沿用了 AWT(JDK 1.1) 的事件处理模型 除了 Java.awt.event 包中定义的事件监听器接口,Swing 还在 javax.swing.event 包中为新增的组件定义了相应的事件类和事件监听器接口 Swing 组件体系结构 Swing 组件早期采用的体系结构是 模式 - 视图 - 控制器 (Model-View-Controller), 简称为 MVC, 如图 4.30 所示 MVC 模型的应用可以追溯至 smalltalk, 它是 GUI 对象常用的一种结构设计, 在 MVC 模型中, 一个可视化应用可以分为以下 3 个方面

46 第 4 章图形用户界面设计 113 图 4.30 MVC 模型 (1) 模式 : 代表应用的数据 (2) 视图 : 是应用数据的可视化表示 (3) 控制器 : 接收用户组数据视图上输入, 并相应地改变数据模式 Swing 开发小组在试图采用 MVC 作为 Swing 组件的结构模型过程中, 发现 MVC 的视图和控制器部分密切相关, 这种简单将应用切分为上述 3 部分的做法在实际工作中效果并不理想 因此, 经过讨论,Swing 开发小组决定采用一种改进的 MVC 模型, 即 分离模式 模型 在这种结构模型中, 模式独立出来, 而视图和控制器则合并成为一个单一的 UI 对象, 用以负责 Swing 组件的外观和感觉 (look and feel, 即 LAF) 在这种结构模型中, 包括 UI 管理器 UI 对象和模式 3 部分 (1)UI 管理器为了管理 Swing 组件的显示特性,Swing 在 javax.swing 包中定义了 UIManager 类, 以跟踪和管理 Swing 组件当前和缺省的 LAF Swing 提供多种 GUI 显示风格, 包括 JavaLAF WindowsLAF 和 motiflaf 等 开发人员可以通过 UIManager 的 setlookandfeel 方法, 动态地设置 Swing 应用的显示风格 (2)UI 对象 /UI 代理 Swing 的每一个组件都有处理其自身的视图和控制器的能力, 但是, 每一个 Swing 组件类都不直接处理与显示相关的部分, 而是将它代理给当前安装的 LAF 模块所提供的 UI 对象, 所以也称之为 UI 代理 UIManager 对 Swing 组件的外观和显示的控制, 是通过它与 Swing 组件的 UI 对象的通信来实现的 UIManager 和 UI 代理与 Swing 组件的可插接的外观和感觉 (pluggable look and feel) 特性密切相关 (3) 模式通常人们认为 : 一个设计良好的程序应当是以体系结构为中心的, 而不是以用户界面为中心的 因而 Swing 在设计过程中以及其后的版本更新过程中, 始终坚持了这一点 基于此, 对每一个能够存储或操纵数据 / 值的组件,Swing 都定义一个单独的 Model 接口, 开发人员既可以使用系统提供的缺省数据模式, 也可以实现自定义的数据模式 在 Swing 中,Model 接口可以分为两类, 即 GUI 状态模式接口和应用 - 数据模式接口 前者是定义了 GUI 组件的可见状态的接口, 例如 ButtonModel 接口中定义了按钮当前状态, 而对于更复杂的 GUI 组件 ( 如 JTree JTable 等 ), 则定义了应用 - 数据模式接口, 这类接口用于管理复杂的数据信息 实际上,Swing 的 分离模式 模型并未明确区分 GUI 状态模式接口和应用 - 数据模式接口 但是, 了解这两种模式接口的不同, 有利于根据应用的需要和组件的特点灵活地进行编程

47 114 Java 语言程序设计案例教程 可插接的外观和感觉可插接的外观和感觉 (pluggable look&feel,pl&f) 是 Swing 的一部分, 它提供了一种灵活的机制, 即开发人员既可以选择 JavaLAF, 如果仍不满足应用的需要, 开发人员还可以利用 Swing 提供的 可插接的外观和感觉 特性来构造一个新的 定制化的 LAF PL&F 的实现与前面提供的 UIManager 和 UI 代理密不可分 每一个 Swing 组件特定于外观和感觉的部分都代理给相应的 UI 对象了 Swing 在 java.swing.plaf 包中定义了一套抽象类来代表 UI 对象, 其命名规范是将 Swing 组件类名的前缀 J 去掉, 再加上后缀 UI 每个 LAF 模块 ( 包括系统安装的和用户自定义的 ), 都必须提供这些抽象类的实现 通常,UI 代理是在 Swing 组件的构造函数被创建, 开发人员可以通过 Swing 组件的 setui/getui 方法来设置 / 获取它, 设置 Swing 组件的 UI 代理的过程实际上就是安装组件的 LAF 的过程 当用一个 Swing 编写的应用程序被 JVM 载入的时候,Swing 缺省的动作是将组件的 LAF 初始化为 JavaLAF 如果希望采用其他的 LAF, 则只需要调用 UIManager 中定义的 setlook AndFeel 方法即可 UIManager 类还定义了各种方法, 以方便用户获取有关 LAF 的各种信息 例如, 本地系统采用的 LAF 当前的和缺省的 LAF 以及系统安装的所有 LAF 等 除采用系统提供的 LAF 外, 还可以定义自己需要的 LAF Swing 定义了抽象类 java.swing.lookandfeel, 它代表了实现一种 LAF 所需要的全部信息, 所有的 LAF 都需要继承抽象类 LookAndFeel, 并实现其中的抽象方法 通常, 一个 LAF 模块 (javax.swing.plaf.metal) 包含 LookAndFeel 类的子类 ( 如 MetalLookAndFeel) 所有 UI 代理类 ( 例如 MetalButtonUI 等 ) 和 LAF 应用类 常用 Swing 组件 1. Swing 组件分类 (1) 顶层容器 :JFrame JApplet JDialog JWindow (2) 中间容器 :JPanel JScrollPane JSplitPane JToolBar JInternalFrame JLayeredPane JRootPane (3) 基本控件 : 实现人机交互的组件, 如 JCheckBox JButton JList JMenu JSlider JTextField 等 向用户显示不可编辑信息的组件有 JLabel JProgressBar 等 ; 向用户显示能被编辑的格式化信息的组件有 JTable JTextArea JColorChooser JFileChooser 等 使用 Swing 时, 应遵循如下原则 : (1)Swing 的基本组件要布局在内容面板中, 而不能直接放在顶级容器中 (2)Swing 的内容面板要添加到 Swing 的顶层容器中才能显示, 通过 setcontentpane (container) 等方法来实现 (3) 每个 GUI 组件只能被容纳一次 (4) 避免使用非 Swing 的重量级组件 2. 常用 Swing 组件功能介绍 (1)JFrame JFrame 类是与 AWT 类里面的 Frame 类相对应的 Swing 组件,JFrame 类只能有唯一的组件 JRootPane, 调用 JFrame.getContentPane() 方法获得 JRootPane 对象 不能直接在 JFrame 实

48 第 4 章图形用户界面设计 115 例对象上增加组件和设置布局管理器, 而应该在 JRootPane 对象上增加子组件和设置布局管理 器 调用 JFrame.EXIT_ON_CLOSE 时, 单击 JFrame 窗口上的关闭按钮, 可以关闭框架窗口 并结束程序运行 (2) 标签 JLabel 可以显示文本或图形的组件, 缺省没有边框 常见构造函数有 : public JLabel() public JLabel(icon) public JLabel(icon, int horizontalalignment) public JLabel(String) public JLabel(String, icon, int horizontalalignment) public JLabel(String, int horizontalalignment) 其中 horizontalalignment 的对齐方式有 : LEFT CENTER RIGHT LEADING or TRAILING (3) 单选钮 JRadioButton 主要用于显示一组相互排斥的选项, 可通过 ButtonGroup 将所有单选钮放在一组, 主要是 激发 itemlistener 事件监听 常见构造函数有 : public JRadioButton() public JRadioButton(icon) public JRadioButton(icon, boolean selected) public JRadioButton(String) public JRadioButton(String, boolean selected) public JRadioButton(String, icon) public JRadioButton(String, icon,boolean selected) (4) 表格 JTable 表格由一个表格头部 ( 列头部 ) 表格列和单元值组成, 行和单元不像列头和列是对象 ; 表格单元值由实现 Table CellRender 接口的对象绘制并由实现 CellEditor 接口的对象进行编辑 ; 表格支持很多选取模式, 包括行 列和单元选取 ; 表格单独在 Swing.table 包中有接口和类 ; 只有放在滚动窗格中的表格列头才会显示, 如图 4.31 所示 表格头 行 图 4.31 表格的组成

49 116 Java 语言程序设计案例教程 常见的构造函数有 : public JTable() public JTable(int numrow, int numcolumns) public JTable(Object[ ][ ] rowdata, Object[ ] columnnames) public JTable(Vector rowdata, Vector columnnames) public JTable(TableModel) public JTable(TableModel, TableColumnModel) public JTable(TableModel, TableColumnModel, ListSelectionModel) 对话框 JOptionPane Swing 中提供了 JOptionPane 类来实现类似 Windows 平台下的 MessageBox 的功能, 同样 在 Java 中也有, 利用 JOptionPane 类中的各个 static 方法来生成各种标准的对话框, 实现显示出 信息 提出问题 警告 用户输入参数等功能 这些对话框都是模态对话框 ConfirmDialog: 确认对话框, 提出问题, 然后由用户自己来确认 ( 按 Yes 或 No 按钮 ) InputDialog: 提示输入文本 MessageDialog: 显示信息 OptionDialog: 组合其他三个对话框类型 这四个对话框可以采用 showxxxdialog() 来显示, 如 showconfirmdialog() 显示确认对话 框 showinputdialog() 显示输入文本对话框 showmessagedialog() 显示信息对话框 showoptiondialog() 显示选择性的对话框 它们所使用的参数说明如下 : (1)ParentComponent: 指示对话框的父窗口对象, 一般为当前窗口 也可以为 null, 即 采用缺省的 Frame 作为父窗口, 此时对话框将设置在屏幕的正中 (2)message: 指示要在对话框内显示的描述性的文字 (3)String title: 标题条文字串 (4)Component: 在对话框内要显示的组件 ( 如按钮 ) (5)Icon: 在对话框内要显示的图标 (6)messageType: 一般可以为如下的值 :ERROR_MESSAGE INFORMATION_MESSAGE WARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE ( 7 ) optiontype : 它决定在对话框的底部所要显示的按钮选项 一般可以为 DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION 本章小结 本章主要介绍了图形用户界面的 Java 编程方法, 其中包括 :GUI 的发展历史及现在的发展方向 ;Applet 类的主要方法和运行过程以及它与 HTML 参数的传递 ;Java 绘图字体及颜色处理 ; 创建和操作基本组件 : 按钮 标签 文本框等 ; 事件处理模型 注册事件监听器及实现一个或多个事件处理程序 ; 根据实际需要运用不同的布局管理器设计安排组件, 常用的布局管理器有 FlowLayout BorderLayout CardLayout GridLayout GridBagLayout 五种 ; 使用 JFrame 类来创建窗口并设置窗口特性, 向窗口中添加组件 ; 创建下拉菜单和弹出式菜单 ; 利用 JDialog 类创建对话框以及对常用的 Swing 组件的简单介绍

50 第 4 章图形用户界面设计 117 实训四 编写计算器程序, 通过 GUI 应用程序实现, 界面如图 4.32 所示 图 4.32 简单计算器界面功能说明如下 : 1. 执行简单的计算 (1) 键入计算的第一个数字 (2) 单击 + 执行加 - 执行减 * 执行乘或 / 执行除 (3) 键入计算的下一个数字 (4) 输入所有剩余的运算符和数字 (5) 单击 = 2. 使用存储的数 (1) 单击 MS, 存储显示的数据 (2) 单击 MR, 重新调用存储的数据 (3) 单击 MC, 清除内存 (4) 单击 M+, 把所显示的数字与内存中的数字相加

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes (Swing) AWTEvent Font LayoutManager 1 Classes in the javax.swing package Heavyweight FontMetrics Object Color Panel Applet JApplet Graphics Component Container Window Frame JFrame * Dialog JDialog JComponent

More information

Microsoft PowerPoint - ch03

Microsoft PowerPoint - ch03 第三章基礎繪圖 (Basic Graphics) 3 1 簡介 3 2 Graphics Class 3 3 3 直線繪製 3 4 長方形繪製 3 5 橢圓形繪製 3 6 弧線繪製 3 7 多邊形繪製 3 8 圖形剪裁 3 9 圖形複製 3 10 習題 (Exercises) 3 1 簡介 在基礎圖文繪製上, 除了前章所探討的文字繪製之外, 本章將介紹基礎圖形之繪製 類別 Graphics 提供了各類圖形之繪製方法程序,

More information

Swing-02.pdf

Swing-02.pdf 2 J B u t t o n J T e x t F i e l d J L i s t B u t t o n T e x t F i e l d L i s t J F r a m e 21 2 2 Swing C a n v a s C o m p o n e n t J B u t t o n AWT // ToolbarFrame1.java // java.awt.button //

More information

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

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 例 2 单击 CLEAR, 重新回到初始状态, 下面让我们看一下自交多边形的情况 当单击数次后, 出现左图的情况, 之后我们单击

More information

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D> 第 7 章 Java 的图形与用户界面 7.1 概述 7.2 底层容器类 JFrame 和 JApplet 7.3 容器的布局 74 7.4 字体和颜色的使用 7.1 概述 利用 Java 中的图形 图像和重要的图形界面组件 (Componet) p 可以实现不同外观要求的窗口 图形和交互方式 1.java.awt awt 包 AWT 是抽象窗口工具集 Abstract Window Toolkit

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

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

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

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

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

java2d-4.PDF

java2d-4.PDF 75 7 6 G r a d i e n t P a i n t B a s i c S t r o k e s e t P a i n t ( ) s e t S t o r k e ( ) import java.awt.*; import java.awt.geom.*; public class PaintingAndStroking extends ApplicationFrame { public

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

chp11.ppt

chp11.ppt Java 软 件 设 计 基 础 Applet 程 序 1.Applet 概 念 Applet 与 Application Application 是 能 独 立 运 行 的 程 序 单 位 ; Applet 程 序 不 能 独 立 运 行, 必 须 依 附 在 网 页 上, 借 助 于 浏 览 器 才 能 运 行 通 常 置 于 服 务 器 端, 当 用 户 连 接 到 该 网 页,Applet

More information

Learning Java

Learning Java Java Introduction to Java Programming (Third Edition) Prentice-Hall,Inc. Y.Daniel Liang 2001 Java 2002.2 Java2 2001.10 Java2 Philip Heller & Simon Roberts 1999.4 Java2 2001.3 Java2 21 2002.4 Java UML 2002.10

More information

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

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难 第 1 章 Java 概 述 Java 的 诞 生 Java 的 特 点 Java 开 发 环 境 安 装 与 配 置 创 建 并 运 行 一 个 简 单 的 Java 程 序 Java 语 言 是 当 今 计 算 机 软 件 行 业 中 最 热 门 的 网 络 编 程 语 言, 以 Java 为 核 心 的 芯 片 技 术 编 译 技 术 数 据 库 连 接 技 术, 以 及 基 于 企 业 级

More information

Microsoft PowerPoint - ch02

Microsoft PowerPoint - ch02 第 一 篇 基 礎 圖 文 動 畫 (Basic Graphics / Animation) 2 1 簡 介 2 2 Frame Class 2 3 執 行 緒 繪 圖 流 程 2 4 Font Class 2 5 Color Class 2 6 中 文 處 理 2 7 習 題 (Exercises) 第 二 章 文 字 繪 製 (Words) 2 1 簡 介 本 書 探 討 的 是 動 畫 遊 戲,

More information

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

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes What is a JavaBean? JavaBean Java JavaBean Java JavaBean JComponent tooltiptext font background foreground doublebuffered border preferredsize minimumsize maximumsize JButton. Swing JButton JButton() JButton(String

More information

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

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Java事件处理模型

Java事件处理模型 Java 事件处理模型 北京理工大学计算机学院 金旭亮 事件驱动 的软件系统 面向对象的软件系统许多是 事件驱动 的, 通常定义了一系列的事件, 并且事先规定好这些事件发生时应该如何响应 由于事件的发生通常是离散的, 所以 事件驱动 的软件系统并没有一个固定的执行流程 Java 的 GUI 应用程序也是 事件驱动 的 2014/11/17 金旭亮 Java 编程系列 (2014 版 ) 2 Java

More information

Microsoft Word - 投影片ch20

Microsoft Word - 投影片ch20 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第二十章 AWT 的繪圖 本章學習目標認識 Java 繪圖的基本概念學習設定圖形的顏色與文字的字型學習用滑鼠繪圖的基本程式設計 AWT 的繪圖 20-2 20.1 繪圖概述 20.1.1 座標系統 Java 的座標系統, 原點在視窗的左上角, 向右為 x 軸方向, 向下為 y 軸方向, 如下圖所示 : 原點 x (x,y)

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第一部分基本实验 31 contentpane.add(p); setjmenubar(mb); // 将菜单项注册给事件监听者 File_Open.addActionListener(this); File_Close.addActionListener(this); File_Exit.addActionListener(this); Edit_Copy.addActionListener(this);

More information

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

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

图形用户界面 (GUI) 设计

图形用户界面 (GUI) 设计 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 图形用户界面 (GUI) 设计 参考 C:\Program Files\Java\jdk1.6.0_10\demo 教学内容 1 Java 图形用户界面设计概述 2 3 4 AWT 组件集 事件处理 Swing

More information

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

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

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

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

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

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt Java 程式設計基礎班 (8) 莊坤達台大電信所網路資料庫研究室 Email: doug@arbor.ee.ntu.edu.tw Class 8 1 回顧 Java Data Structure Class 8 2 Java AWT package Component: 一些 GUI 元件, 如 : Button Label 等 Container: 用來放置 GUI 元件的地方 Container

More information

幻灯片 1

幻灯片 1 图形界面程序设计 计算机信息系 课程引入说课提纲 案例 体验 双击运行 FiveMain.jar 文件, 和同桌一起体验下这个五子棋游戏, 并观察下这个游戏有哪些部分组成? 课程引入说课提纲 提出 问题 这个五子棋游戏和我们前几章完成的 学生综合素质评测系统 最大的区别是什么? 有什么优点或缺点吗? 1 图形用户界面是什么? 2 怎么用图形用户界面开发? 课程引入说课提纲 任务 任务名称 总任务 :

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

1. 2. Flex Adobe 3.

1. 2. Flex Adobe 3. 1. 2. Flex Adobe 3. Flex Adobe Flex Flex Web Flex Flex Flex Adobe Flash Player 9 /rich Internet applications/ria Flex 1. 2. 3. 4. 5. 6. SWF Flash Player Flex 1. Flex framework Adobe Flex 2 framework RIA

More information

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2. 2005-06 p.1 HTML HyperText Mark-up Language 1. HTML Logo, Pascal, C++, Java HTML 2. HTML (tag) 3. HTML 4. HTML 1. HTML 2. 3. FTP HTML HTML html 1. html html html cutehtmleasyhtml 2. wyswyg (What you see

More information

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

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

More information

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

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 单元七 Java GUI 应用程序开发 1.AWT 及其图形界面组件 2.AWT 布局管理器 3.AWT 事件处理机制 案例 7-1 登录窗口 登录窗口是很多应用系统中不可缺少的组成部分 通过验证用户输入的用户名和密码, 决定是否允许用户进入系统, 在一定程度上保证系统的安全 本案例设计一个登录窗口, 运行 界面如图 7-1 所示 图 7-1 案例 7-1 登录窗口 众所周知, 拥有图形用户界面的计算机应用程序生动

More information

大漠 伪前端, 就职于淘宝

大漠 伪前端, 就职于淘宝 CSS Grid Layout 2016-12-17 @ 大漠. #CSSConf https://www.flickr.com/photos/19139526@n00/8331063530/ 大漠 伪前端, 就职于淘宝 古老的 table 布局 现代 Web 布局 Float inline-block display: table position (absolute 或 relative)

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D> 第 12 章图形用户界面基础 1 动因 为 Java GUI 程序设计而设计的 API 是如何应用面向对象 原则的绝佳范例 从本章开始将学习 Java GUI API 的框 架结构, 还要学习如何使用 GUI 组件为应用程序和 applet 开发用户友好接口 2 学习目标 区分 Swing 和 AWT 的不同 ( 第 12.2 节 ) 描述 Java GUI API 的层次体系结构 ( 第 12.3

More information

学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 新疆农业大学计算机与信息工程学院陈燕红

学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 新疆农业大学计算机与信息工程学院陈燕红 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 教学内容 1 Applet 程序 2 命令行程序 3 4 5 6 第八章 Applet 技术 Applet 概述 Applet 技术一出现, 互联网立刻焕发出无限的生机, 因为 Applet 不仅可以生成绚丽多彩的

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1 Chapter 01 Photoshop CS6 的基本操作 本章内容 1.1 Photoshop 的应用领域 1.6 控制面板的显示与隐藏 1.2 位图和矢量图的特性 1.7 新建 打开与保存文件 1.3 像素和分辨率的关系 1.8 图像的缩放 1.4 色彩模式 1.9 屏幕显示模式 1.5 Photoshop CS6 界面 1.10 计算机图形图像常用的色彩模式 Photoshop CS6 艺术设计案例教程

More information

chp8.ppt

chp8.ppt Java 软件设计基础 图形用户界面程序设计入门 1. 组件概述 GUI: Graphics User Interface 设计和实现 GUI 的主要难点 创建组成界面的各成分和元素, 指定它们的属性和位置关系, 根据具体需要布局排列, 从而构成完整的 GUI 的外观表象 ; 在 GUI 程序中, 代码所执行的路线及顺序都是很不确定的 在 GUI 程序中, 用户可以点击任意按键并和屏幕上的其他任何部分进行交互及信息传递

More information

可 Web 编程的NativeUI 设计与实现

可 Web 编程的NativeUI  设计与实现 可 Web 编程的 NativeUI 设计与实现 张袁炜 zhangyuanwei@baidu.com 欢迎转岗简历请发 About Me @ 张袁炜 直达号 网址导航 百度 音乐 前端 Node.js Android Arduino RaspberryPI https://github.com/zhangyuanwei Outline 一个 Hybrid App 的进化史 Native UI 实现原理

More information

ChinaBI企业会员服务- BI企业

ChinaBI企业会员服务- BI企业 商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:du.haoquan@bizintelsolutions.com 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户

More information

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

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

More information

untitled

untitled OGRE http://antsam.blogone.net AntsamCGD@hotmail.com OGRE OGRE listener listener target listener target Dispatcher Processor Input Reader Event class view Event Class view Input Event ctrlaltshift ascoll

More information

Java 1 Java String Date

Java 1 Java String Date JAVA SCJP Java 1 Java String Date 1Java 01 Java Java 1995 Java Java 21 Java Java 5 1-1 Java Java 1990 12 Patrick Naughton C++ C (Application Programming Interface API Library) Patrick Naughton NeXT Stealth

More information

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

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y 拼图游戏 任务说明 本实例实现了拼图游戏的开发 运行程序, 单击 开始 按钮将打乱图片的位置, 效果如图 1 所示, 然后通过鼠标单击图片进行移动, 直到将所有图片都移动到正确位置, 游戏过关, 过关后的效果如图 2 所示 图 1 打乱图片位置的效果图 2 图片移动到正确位置的效果 关键技术 本程序主要通过 Swing 与枚举类实现, 程序将一幅完整的图片平均分成 9 部分, 每一部分为一个正方形,

More information

VB程序设计教程

VB程序设计教程 高 等 学 校 教 材 Visual Basic 程 序 设 计 教 程 魏 东 平 郑 立 垠 梁 玉 环 石 油 大 学 出 版 社 内 容 提 要 本 书 是 按 高 等 学 校 计 算 机 程 序 设 计 课 程 教 学 大 纲 编 写 的 大 学 教 材, 主 要 包 括 VB 基 础 知 识 常 用 程 序 结 构 和 算 法 Windows 用 户 界 面 设 计 基 础 文 件 处

More information

A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ / ] NotePad A-2

A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ / ] NotePad A-2 HTML A-1 HTML A-2 A-2 HTML A-8 A-3 A-14 A-4 A-26 A-5 A-30 A-6 A-42 A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ /

More information

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

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

劳动保护与医疗保健 第 二 章 止标志共 23 个 劳 动 安 全 技 术 22 2 警告标志 由于三角形引人注目 故用作 警告 标志 警告人们注意可能发生的多种危险 三角的背景使用黄色 三角图形和三角内的图像均用黑色描 绘 黄色是有警告含义的颜色 在对比色黑色的衬托下 绘成的 警告标志 就更引人注目 3 指令标志 在圆形内配上指令含义的颜色 蓝 色 并用白色绘制必须执行的图形符号 构成 指令标志

More information

ebook111-4

ebook111-4 Flash 4 Flash 4 F l a s h 5 Flash 4 Flash Flash 4 Flash 4 Flash 4 4.1 Flash 4 Flash 4 Flash 4 Flash Flash 4 Flash 4 4.2 Flash 4 Flash 4 A Flash 4 S h i f t F i l e P r e f e r e n c e s > > Flash 4 Flash

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

ebook60-13

ebook60-13 13 H T M L F l a s h J a v a < i m g > 13.1 H T M L A c t i v e X H T M L < i m g > HTML 4.0 < o b j e c t > < / o b j e c t > 13.1.1 H T M L < o b j e c t > c l a s s i d d a t a < p a r a m > 1.

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

(京)新登字063号

(京)新登字063号 教 育 部 职 业 教 育 与 成 人 教 育 司 推 荐 教 材 Java 程 序 设 计 教 程 ( 第 二 版 ) 沈 大 林 主 编 沈 昕 肖 柠 朴 曾 昊 等 编 著 内 容 简 介 Java 是 由 美 国 SUN 公 司 开 发 的 一 种 功 能 强 大 的, 具 有 简 单 面 向 对 象 分 布 式 可 移 植 等 性 能 的 多 线 程 动 态 计 算 机 编 程 语 言

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

附录J:Eclipse教程

附录J:Eclipse教程 附 录 J:Eclipse 教 程 By Y.Daniel Liang 该 帮 助 文 档 包 括 以 下 内 容 : Eclipse 入 门 选 择 透 视 图 创 建 项 目 创 建 Java 程 序 编 译 和 运 行 Java 程 序 从 命 令 行 运 行 Java Application 在 Eclipse 中 调 试 提 示 : 在 学 习 完 第 一 章 后 使 用 本 教 程 第

More information

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

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

第1章

第1章 第 17 章 有來有往 互動式視窗程式 1 本章提要 17.1 前言 17.2 元件 Event 觸發 17.3 Event 監聽者 Listener 17.4 Event 接收者 Adapter 17.5 Event 類別及提供的函式 17.5.1 MouseEvent 17.5.2 KeyEvent 17.5.3 TextEvent 17.5.4 WindowEvent 17.5.5 其他 Event

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

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

利用Java技术编写桌面软件基础 利 用 Java 技 术 编 写 桌 面 软 件 基 础 在 学 习 Java 编 程 语 言 的 细 节 和 语 法 时, 我 们 会 碰 到 这 样 一 个 问 题 : 开 发 桌 面 应 用 软 件 需 要 使 用 哪 些 Java 技 术, 应 当 引 入 哪 些 package? 这 一 问 题 的 答 案 取 决 于 开 发 的 应 用 软 件 类 型 和 它 的 作 用 这 篇 文 章

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Perl CGI 1 Perl CGI 2 Perl CGI 3 Perl CGI 4 1. 2. 1. #!/usr/local/bin/perl 2. print "Content-type: text/html n n"; 3. print " n"; 4. print " n"; 3. 4.

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

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

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

More information

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

1.3 最终效果图 : 2 内部布局代码 2.1 按键按钮代码 // 初始化计算器上键的按钮, 将键放在一个画板内 JPanel keypanel = new JPanel(); // 用网格布局器,4 行,5 列的网格, 网格之间的水平方向间隔为 3 个象素, 垂直方向间隔为 3 个象素 keyp 计算器 1. 计算器上的键的显示名字 1.0 继承 JFrame 类 public class Calculate extends JFrame { 1.1 定义常量 计算器上的键的显示名字 public final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x",

More information

ZW1.PDF

ZW1.PDF C. A. R. Hoare, The Emperor s Old Clothes Java C++ Objective C Eiffel Smalltalk Mesa Lisp Java Java Java C++ Java 10 Item 1 Item 2 String.equals() == 1 1 Item 3 Java C++ Java Item 4 Java Item 5 Java Item

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

untitled

untitled PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說

More information

第1章

第1章 第 16 章 千變萬化的視窗程式 1 本章提要 16.1 前言 16.2 AWT package 介紹 16.3 視窗 (Frame) 16.4 版面管理員 (Layout Manager) 16.5 各種好用的圖形介面元件 16.5.1 勾選元件 Checkbox 16.5.2 文字框 TextField 16.5.3 列示 List 16.5.4 標籤 Label 16.5.5 選單 Menu

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

Windows XP

Windows XP Windows XP What is Windows XP Windows is an Operating System An Operating System is the program that controls the hardware of your computer, and gives you an interface that allows you and other programs

More information

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

第8章  JavaScript对象层次与事件处理 第 8 章 JavaScript 对象层次与事件处理 JavaScript 是一种面向对象的语言, 在 JavaScript 中的对象都是有层次的, 在本章里将会介绍 JavaScript 的对象层次和 JavaScript 的事件处理方式 8.1 JavaScript 的对象层次 JavaScript 中的对象很多, 这些对象并不都是独立存在的, 而是有着层次结构 对象可以依照层次来进行调用 8.1.1

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作 * 夏传玲 : 本文简要回顾了国内外定性研究在最近 多年的发展概况, 总结 了定性研究的六个发展趋势和分析策略上的三种流派 在上述两种背景下, 本文探讨了计算机辅助的定性分析给定性研究带来的机遇和挑战, 特别是它和手工操作对比时的优势和劣势, 以及应用这种定性分析技术所可能面临的困难 : 定性研究定性分析 文化差异,, (, ),,,, ( - ) ( - ) ( - ) ( - ) ( - ) (

More information

Microsoft Word - 改版式网页全文.doc

Microsoft Word - 改版式网页全文.doc 第 4 章 Dreamweaver CS3 高 级 篇 4.1 表 单 概 述 表 单 是 用 来 收 集 浏 览 者 的 用 户 名 密 码 E-mail 地 址 个 人 爱 好 和 联 系 地 址 等 用 户 信 息 的 输 入 区 域 集 合 浏 览 者 填 写 表 单 的 方 式 一 般 是 输 入 文 本 选 择 单 选 按 钮 或 复 选 框 以 及 从 下 拉 列 表 框 中 选 择

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

Converting image (bmp/jpg) file into binary format

Converting image (bmp/jpg) file into binary format RAiO Image Tool 操作说明 Version 1.0 July 26, 2016 RAiO Technology Inc. Copyright RAiO Technology Inc. 2013 RAiO TECHNOLOGY INC. www.raio.com.tw Revise History Version Date Description 0.1 September 01, 2014

More information

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

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

Business Objects 5.1 Windows BusinessObjects 1

Business Objects 5.1 Windows BusinessObjects 1 Business Objects 5.1 Windows BusinessObjects 1 BusinessObjects 2 BusinessObjects BusinessObjects BusinessObjects Windows95/98/NT BusinessObjects Windows BusinessObjects BusinessObjects BusinessObjects

More information

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK 2 l 跨裝置網頁設計 Android ios Windows 8 BlackBerry OS Android HTML 5 HTML 5 HTML 4.01 HTML 5 CSS 3 CSS 3 CSS 2.01 CSS 3 2D/3D PC JavaScript

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information