Microsoft Word - 正文.doc

Size: px
Start display at page:

Download "Microsoft Word - 正文.doc"

Transcription

1 第 7 章 Java 中的 GUI 编程 图形用户界面 (Graphical User Interface,GUI) 使用图形的方式, 借助菜单 按钮等标准界面元素和鼠标操作, 帮助用户方便地向计算机系统发送指令, 启动操作, 并将系统运行的结果同样以图形方式显示给用户 图形用户界面操作简单, 省去了字符界面用户必须记忆各种命令的麻烦, 深受广大用户的喜爱和欢迎 所以学习设计和开发图形用户界面, 是应用软件开发人员的必修课 本章主要介绍 Swing 和 AWT 中基本组件的用法, 如何创建简单的用户界面, 包括布局管理 用户事件, 以及如何创建复杂的用户界面等 图形用户界面概述 创建简单的用户界面 布局管理 用户界面 创建复杂的用户界面 7.1 图形用户界面概述 GUI 由若干 GUI 组件 (Component) 组成,GUI 组件是可见的对象, 用户可以通过鼠标或键盘对它进行操作, 通过对不同事件的响应, 来完成组件与用户之间或组件与组件之间的交互 用户界面设计在程序设计中有较大的比重, 在较为复杂的 Java 应用程序中, 用户界面设计是不可缺少的 Java-AWT 抽象窗口工具箱就是专门是了解和掌握 UI 的各主要构件以及布局管理器 Java 基类 (Java Foundation Classes,JFC) 是关于 GUI 组件和服务的完整集合, 它大大简化了健壮的 Java 应用程序的开发和布署 JFC 作为 Java2SDK 的一个组成部分, 主要由 5 个 API 构成 :AWT Swing Java 2D Drag and Drop Accessibility, 如图 7.1 所示 AWT 组件库为各类 Java 应用程序提供了多种 GUI 工具 Swing 提供了一整套用 Java 语言编写的 GUI 组件, 以保证可移植性 Java 2D 是一种图形 API, 它为 Java 应用程序提供了高级的二维 (2D) 图形图像处理类的集合 同时, 该 API 还包含了一套扩展字体集合 Drag and Drop 技术提供了 Java 和本地应用程序之间的互用性, 用来在 Java 应用程序和不支持 Java 技术的应用程序之间交换数据 Accessibility API 提供了一套高级工具, 可以辅助开发使用非传

2 110 Java 语言程序设计 统输入和输出方式的应用程序, 它提供了一个辅助技术接口, 如 : 屏幕阅读器 屏幕放大器 听觉文本阅读器 ( 语音处理 ) 等 图 7.1 JFC 的组成 Java 早期进行图形用户界面 (Graphics User Interface,GUI) 设计时, 使用 Java.awt 包中 提供的类, 比如 Button( 按钮 ) TextField( 文本框 ) 等组件类, AWT 就是 Abstract Windowing Toolkit( 抽象窗口工具包 ) 的缩写 Java 2(JDK1.2) 增加了一个新的 javax.swing 包, 该包提 供了功能更为强大的用来设计 GUI 界面的类 Java 早期的 java.awt 包中的类创建的组件习惯上称作重量组件, 例如, 当用 java.awt 包中 的 Button 类创建一个按钮组件时, 都有一个相应的本地组件 (native) 在为它工作 ( 称为它的 同位体 ) 所谓本地组件是指非 Java 语言编写的组件 AWT 组件的设计原理是把与显示组件有关的许多工作和处理组件事件的工作交给相应的 本地组件 因此把有同位体的组件称为重量组件, 基于重量组件的 GUI 设计有很多不足之处 比如程序的外观在不同的平台上可能有所不同, 而且重量组件的类型也不能满足 GUI 设 计的需要, 例如, 不能把一幅图像添加到 AWT 按钮上或 AWT 标签上, 因为 AWT 按钮或标 签外观绘制是由本地的同位体来完成的, 而同位体可能是用 C++ 编写的, 它的行为是不能被 Java 扩展的 另外, 使用 AWT 进行 GUI 设计可能会消耗大量的系统资源 javax.swing 包提供了更加丰富的 功能强大的组件, 称为 Swing 组件, 其中大部分组件 是轻量组件, 没有同位体 Swing 组件的轻组件在设计上和 AWT 完全不同, 轻组件把与显示 组件有关的许多工作和处理组件事件的工作交给相应的 UI 代表来完成, 这些 UI 代表是用 Java 语言编写的类, 这些类被增加到 Java 的运行环境中, 因此组件的外观不依赖平台, 不仅在不 同平台上的外观是相同的, 而且较重量组件而言有更高的性能 Swing 采用了一种 MVC 的设计方式, 即模型 - 视图 - 控制 (Model-View-Controller), 其中模型用来保存内容, 视图用来显示内容, 控制器用来控制用户输入 MVC 是现有的编程语言中制作图形用户界面的一种通用的思想, 其思路是把数据的内容 本身和显示方式分离开, 这样就使得数据的显示更加灵活多样 比如, 某年级各个班级的学生 人数是数据, 则显示方式是多种多样的, 可以采用柱状图显示, 也可以采用饼图显示和采用直 接的数据输出 因此在设计的时候, 就考虑把数据和显示方式分开, 对于实现多种多样的显示 是非常有帮助的

3 第 7 章 Java 中的 GUI 编程 111 Swing 胜过 AWT 的主要优势在于 MVC 体系结构的普遍使用 在一个 MVC 用户界面中, 存在三个通讯对象 : 模型 视图和控件 模型是指定的逻辑表示法, 视图是模型的可视化表示法, 而控件则指定了如何处理用户输入 当模型发生改变时, 它会通知所有依赖它的视图, 视图使用控件指定其相应机制 javax.swing 包中 JComponent( 轻组件 ) 类是 java.awt 包中 Container 类的一个直接子类 Component 类的一个间接子类 javax.swing 包中的 JFame 类和 JDialog 类分别是 java.awt 包中 Frame 类和 Dialog 类的直接子类 Window 类的间接子类 ( 如图 7.2 所示 ) 图 7.2 JComponent 类的部分子类以及 JFrame 类和 JDialog 类在学习 GUI 编程时, 必须很好地理解掌握两个概念 : 容器类 (Container) 和组件类 (Component) Java 把由 Component 类的子类或间接子类创建的对象称为一个组件 Java 把由 Container 的子类或间接子类创建的对象称为一个容器 可以向容器添加组件 Container 类提供了一个 public 方法 :add(), 一个容器可以调用这个方法将组件添加到该容器中 容器调用 removeall() 方法可以移掉容器中的全部组件 ; 调用 remove(component c) 方法可以移掉容器中参数指定的组件 每当容器添加新的组件或移掉组件时, 应该让容器调用 validate() 方法, 以保证容器中的组件能正确显示出来 容器本身也是一个组件, 因此可以把一个容器添加到另一个容器中实现容器的嵌套 javax.swing 包中有 4 个最重要的类 :JApplet JFrame JDialog 和 JComponent JComponent 类的子类都是轻组件,JComponent 类是 java.awt 包中 Container 类的子类, 因此所有的轻组件也都是轻容器 JFrame JApplet JDialog 都是重组件, 即有同位体的组件 窗口 (JFrame) 对话框(JDialog) 小应用程序(JApplet) 可以和操作系统交互信息, 轻组件必须在这些重量容器中绘制自己, 习惯上称这些容器为 swing 的底层容器 下面简单介绍一下 AWT 和 Swing 1.AWT AWT(Abstract Windowing Toolkit) 是一个独立平台的窗口工具组件集, 它依赖于对等组件 (Peer), 而对等组件是一个本地 GUI 组件, 由 AWT 类管理 AWT 的作用是给用户提供基本的界面组件, 如按钮 列表框 菜单等

4 112 Java 语言程序设计 AWT 组件中, 包含与其对等组件的大量实用操作 例如使用 AWT 创建了一个 Menu 类的实例, 那么 Java 运行时系统将创建一个菜单对等组件的实例, 而由创建的对等组件实际执行菜单的显示与管理 在创建菜单实例时,Solaris JDK 将产生一个 Motif 菜单对等组件, 而 Windows JDK 将产生一个 Window 菜单对等组件等 这样, 对等组件保护着每个平台的本地外观和感觉 (Look and Feel), 但是可以在移植时改变它们的大小和位置, 因为它们在不同的平台可能会有不同的大小, 也许还有不同的行为 而 AWT 类仅是对等组件外围的包装与操作工具, 因此, 对等组件可以快速产生一个 GUI 工具组件 AWT 最初只包括与本地对等组件相关联的组件, 称为重量组件 ( Heavyweight Component), 这些组件在自己的本地不透明窗口中绘制, 在改变其默认行为时, 不可以为其扩展子类, 此外, 它们必须是矩形的, 且不能有透明背景 因此, 在 AWT 1.1 版本中引入了轻量组件 (Lightweight Component) 的概念 轻量组件没有本地对等组件, 它不在本地不透明窗口中绘制, 而是在它们的重量容器窗口中绘制, 它们直接扩展了 java.awt.component 类或 java.awt.container 类 轻量组件不会损失与它们关联的不透明窗口的性能, 它们可以有透明的背景及非矩形的外观, 但在轻量组件的容器中必须有一个是重量组件, 否则无法在窗口内绘制轻量组件 我们将在本章对 AWT 软件包中的常用组件进行详细讲解 常用组件 (AWT) 用于创建 GUI 组件的类包含在 java.awt 软件包中, 可以通过下面的语句来引入 java.awt 软件包中的类 : import java.awt.*; 图 7.3(a) 列出了 java.awt 中的各个类, 图 7.3(b) 列出 AWT 常用图形组件类的继承关系 (a)java.awt 中的各个类 图 7.3

5 第 7 章 Java 中的 GUI 编程 113 (b)awt 常用图形组件类的继承关系图 7.3( 续图 ) 2.Swing Swing 是建立在 AWT 基础之上的, 用来代替 AWT 中的重量组件, 而不是用来替代 AWT 本身 它利用了 AWT 的底层组件, 包括图形 颜色 字体 工具包和布局管理器等 它使用 AWT 最好的部分来建立一个新的轻量组件集, 而丢弃了 AWT 中有问题的重量组件部分 Swing 支持可插接观感 (Pluggable Look-and-Feel), 可插接的观感可使开发人员构建这样的应用程序 : 这些应用程序可在任何平台上执行, 就好像是专门为那个特定平台而开发的一样 在 Microsoft Windows 环境中执行的程序似乎是专为这个环境而开发的 ; 而同样的程序在 UNIX 平台上执行, 其行为又似乎是专为 UNIX 环境开发的 通过引入新特性和丰富的功能,Swing 提供了比 AWT 更全面的组件集合 Swing API 是围绕实现 AWT 各个部分的 API 构建的, 这保证了所有早期的 AWT 组件仍然可以使用 7.2 创建简单用户界面 框架与窗口框架 (Frame) 是带标题的顶层层窗口 从类的层次上来看, 它属于 Container 类 所以, 在每个 Frame 中都可以设置版面, 缺省设置是 BorderLayout Frame 类的构造方法有两种, 如表 7-1 所示

6 114 Java 语言程序设计 表 7-1 java.awt.frame 的构造函数与方法 (Method) 构造函数 主要功能 Frame() Frame(String title) Method Image geticonimage() void seticonimage(image img) int getstate() MenuBar getmenubar() void setmwnubar(menubar mb) void remove(menucompoent mb) String gettitle() String settitle(string title) boolean isresizable() void setresizable() 创建框架创建框架, 并以 title 为默认的标题主要功能返回窗口最小化时的图标设置窗口最小化时的图标为 img 返回窗口的状态,Frame.Normal 代表一般状态,Frame.ICONIFIED 代表窗口为最小化返回窗口使用的菜单对象设置窗口使用的菜单对象为 mb 删除窗口的菜单对象 mb 取得窗口的标题设置窗口的标题为 title 返回窗口是否可改变大小设置窗口是否允许改变大小 需要说明的是, 用这两种方法创建的窗口都是非可视窗口, 只有作用 Frame 类的父类 Windows 类中的 show 方法后, 才能在屏幕上显示出来 设置窗口的大小可以使用 resize 方法 javax.swing 包中的 JFrame 类是 java.awt 包中 Frame 类的子类, 因此 JFrame 类及其子类创建的对象是窗体,JFrame 类或子类创建的对象是重量容器 (1) 尽管 JFrame 窗口也是一个容器, 不可以把组件直接添加到 JFame 窗体中 (2)JFame 窗体含有一个称为内容面板的容器, 应当把组件添加到内容面板中 ( 内容面板也是重量容器 ) (3) 不能为 JFame 窗体设置布局, 而应当为 JFame 窗体的内容面板设置布局 内容面板的默认布局是 BorderLayout 布局 JFame 窗体通过调用方法 getcontentpane() 得到其内容面板 当应用程序需要一个窗口时, 可使用 JFrame 或其子类创建一个对象 窗口默认地被系统添加到显示器屏幕上 窗体有一个基本的结构 : 窗体的上面是一个很窄的矩形区域, 称为菜单条区域, 用来放置菜单条 菜单条区域下面的区域用来放置窗体的内容面板 ( 如图 7.4 所示 ) 窗体中如果没有添加菜单条, 菜单条区域将被内容面板挤占 图 7.4 JFame 窗体的基本结构 JFrame 类常用方法 :

7 JFrame(): 该构造方法可以创建一个无标题的窗口 第 7 章 Java 中的 GUI 编程 115 JFrame(String s): 该构造方法可以创建一个标题为 s 的窗口 public void setbounds(int a,int b,int width,int height): 窗口调用该方法可以设置出现在屏 幕上时的初始位置是 (a,b), 即距屏幕左面 a 个像素 距屏幕上方 b 个像素 ; 窗口的宽是 width, 高是 height (0,0) 小的 public void setsize(int width,int height): 设置窗口的大小, 窗口在屏幕出现的默认位置是 public void setvisible(boolean b): 设置窗口是可见还是不可见, 窗口默认是不可见的 public void setresizable(boolean b): 设置窗口是否可调整大小, 窗口默认是可调整大 public void setlocation(int x,int y): 设置窗口出现的坐标,x 为横坐标,y 为纵坐标 注意 :setsize() 与 setlocation() 联合起来相当于 setbounds() public void setdefaultcloseoperation(int operation): 该方法用来设置单击窗体右上角的 关闭图标后, 程序会做出怎样的处理 其中的参数 operation 取下列有效值 : DO_NOTHING_ON_CLOSE: 什么也不做 HIDE_ON_CLOSE: 隐藏当前窗口 DISPOSE_ON_CLOSE: 隐藏当前窗口, 并释放窗体占有的其他资源 EXIT_ON_CLOSE: 结束窗体所在的应用程序 窗口构造方法模式如下 : Window(String s) super(s); setsize(260,270); setlocation(120,120); setvisible(true); setdefaultcloseoperation(jframe.dispose_on_close); JMenuBar menubar=new JMenuBar(); menubar.add( 菜单 1); menubar.add( 菜单 2); menubar.add( 菜单 n); setjmenubar(menubar); Container con=getcontentpane(); con.add( 组件 1); con.add( 组件 2); con.add( 组件 n); con.setlayout( 布局策略 ); con.validate();

8 116 Java 语言程序设计 validate(); 组件 1.addActionListener(this); 组件 2.addActionListener(this); 组件 n.addactionlistener(this); 菜单项 1.addActionListener(this); 菜单项 2.addActionListener(this); 菜单项 m.addactionlistener(this); 按钮 (Button) 当用户用鼠标单击按钮时, 会激活一个事件 按钮由 Button 类创建, 而 Button 类是由 Component 类直接扩展的 表 7-2 列出了 Button 类的构造函数及常用方法 表 7-2 Button 类的构造函数及常用方法 构造函数 说明 public Button() public Button(String label) 常用方法 public String getlabel() public void setlabel(string label) 创建一个无标签按钮创建一个有标签按钮说明获取按钮标签设置按钮标签 按钮表面上显示的文字称为按钮标签 一个 GUI 可以包含多个按钮, 但每个按钮的标签 必须是唯一的, 多个按钮具有相同的标签是一个逻辑错误, 这样会使用户产生混淆 例 7-1 的程序创建 3 个按钮, 并将它们添加到 applet 中, 其中两个按钮带有按钮标签 下面的语句用于创建 3 个 Button 引用 : private Button button1,button2,button3; 每个 Button 引用都通过 new 和一个 Button 构造函数来实例化 下面语句分别对 button1 button 2 和 button 3 进行实例化 : button1 = new Button("Click here"); button2 = new Button("Sorry, I do nothing"); button3 = new Button(); 构造函数 Button 中的字符串参数就是按钮标签, 其中对象 Button 3 没有标签 要想使各对象可见, 必须使用 add 方法将它们添加到一个容器中 前面已经介绍过, 容 器是用于放置多个组件的一个区域, 本章主要使用的容器是 applet 和 Frame 使用 Container 类的 add 方法可以将组件安置到容器上 下面的语句实现将创建的三个按钮组件安置到 applet 中 : add(button1); add(button2);

9 add(button3); 第 7 章 Java 中的 GUI 编程 117 例 7-1 编写一个程序, 功能是创建三个按钮并把它们加入到 applet 中 import java.applet.applet; import java.awt.*; public class MyButtons extends Applet private Button button1,button2,button3; public void init() button1=new Button("Click here"); button2=new Button("Sorry, I do nothing"); button3=new Button(); // 添加按钮 add(button1); add(button2); add(button3); 先将上述程序保存为 MyButtons.java 文件, 再编译生成 MyButtons.class 文件, 然后建立 一个如下内容的网页文件 test.html, 将该 html 文件与 MyButtons.class 文件放在相同的目录下 : <html> <head><title> 图形界面测试 </title></head> <body> <applet code="mybuttons.class" width=300 height=200> </applet> </body> </html> 用浏览器打开该 html 文件, 或者使用 Java 的小程序查看器 appletviewer, 即键入如下命令 : appletviewer test.html 程序运行的结果如图 7.5 所示 图 7.5 创建 3 个按钮 标签与文本框 1. 标签 (label) JLabel 类负责创建标签对象, 标签用来显示信息, 但没有编辑功能 JLabel 类的构造方法 :

10 118 Java 语言程序设计 齐方式 public Jlabel(): 创建没有名字的标签 public Jlabel(String s): 创建名字是 s 的标签,s 在标签中靠左对齐 public Jlabel(String s, int alignment): 参数 alignment 决定标签中的文字在标签中的水平对 public Jlabel(Icon icon): 创建具有图标 icon 的标签,icon 在标签中靠左对齐 public Jlabel(String s,icon icon,int alignment): 创建名字是 s, 具有图标 icon 的标签, 参数 aligment 决定标签中的文字和图标做为一个整体在标签中的水平对齐方式 JLabel 类的常用方法 : String gettext(): 获取标签的名字 void settext(string s): 设置标签的名字是 s Icon geticon(): 获取标签的图标 void seticon(icon icon): 设置标签的图标是 icon void sethorizontaltextposition(int a) 参数 a 确定名字相对于图标的位置,a 的取值是 JLabel.LEFT,JLabel.RIGHT void setverticaltextposition(int a): 参数 a 确定名字相对于图标的位置, 参数 a 取值是 JLabel.BOTTOM,JLabel.TOP 例 7-2 编写一个程序, 功能是创建两个标签并把它们加入到 applet 中 import java.applet.applet; import java.awt.*; public class MyLabel extends Applet private Label label1,label2; public void init() //create a Label without text label1=new Label(); //create a Label with a string argument label2=new Label("Label with text"); //add labels to applet add(label1); add(label2); 程序的运行结果如图 7.6 所示 图 7.6 创建标签示例

11 第 7 章 Java 中的 GUI 编程 119 Label 对象通过 Label 类及一个 Label 构造函数创建 下面的语句是使用 Label 类创建两个 标签引用 : private Label label1,label2; 对象 label1 使用下面的语句进行创建 : label1=new Label(); 这个标签上未显示任何文本 一般情况下, 对于在初始时刻不必显示任何文本的标签通 常使用这种类型的标签对象, 不过, 在后面程序中, 仍然可以在该标签上显示信息 标签对象 label2 通过下面语句创建 : label2=new Label("Label with text"); 在这个标签上显示文本字符串 Label with text 2. 文本框 单行文本框 (TextField) 和多行文本框 ( 即文本区,TextArea) 是由 TextComponent 类直 接继承的, 我们先讨论单行文本框 (1) 单行文本框 单行文本框是一个单行显示区域, 可以从键盘上接收用户输入 用户将数据输入文本框, 然后按回车键就可以在程序中使用该数据 单行文本框也可以用于显示信息 表 7-3 列出了 TextField 类的构造函数 表 7-3 TextField 类的构造函数及常用方法 构造函数 说明 public TextField() 创建一个 TextField 对象, 默认列宽为 2 public TextField(int cols) public TextField(String text) public TextField(String text,int cols) public void setechochar(char c) public void settext(string text) public String gettext() 创建一个指定列宽的 TextField 对象创建一个 TextField 对象, 显示字符串 text 创建一个指定列宽的 TextField 对象, 并显示字符串 text 设置用户输入字符时的回显字符设置单行文本框的文本内容获取单行文本框的文本内容 使用 JComponent 的子类 JPasswordField 可以建立一个密码框对象 密码框可以使用 setechochar(char c) 设置回显字符 ( 默认的回显字符是 * ); 使用 char[] getpassword() 方法返 回密码框中的密码 例 7-3 演示单行文本框的构造函数及常用方法的使用 import java.applet.applet; import java.awt.*; public class TextFieldDemo extends Applet private TextField textfield1,textfield2; public void init() //construct TextField with default text textfield1=new TextField(" 在这里输入用户名 "); //construct TextField with 15 elements visible textfield2=new TextField(15);

12 120 Java 语言程序设计 //set the echo charactor textfield2.setechochar('*'); //add components to applet add(new Label(" 用户名 : ")); add(textfield1); add(new Label(" 密码 : ")); add(textfield2); public void paint(graphics g) String s; s=" 用户名 : "+textfield1.gettext(); s=s+" 密码 : "+textfield2.gettext(); showstatus(s); 程序运行结果如图 7.7 所示 图 7.7 单行文本框示例 通过下列语句 : textfield1=new TextField(" 在这里输入用户名 "); textfield2=new TextField(15); 创建了两个 TextField 的对象 textfield1 和 textfield2, 其中 textfield1 的列宽为所显示字符 串的长度,textField2 的列宽为 15, 未显示任何文本 通过下列语句 : textfield2.setechochar('*'); 设置了 textfield2 的掩码字符, 每当在该文本框中输入一个字符时, 就会显示一个星号 (*) 注意, 虽然为 textfield2 设置了掩码字符, 但该文本框的 gettext 方法仍然返回实际输入的字 符串 (2) 多行文本框即文本区 (TextArea) 多行文本框 (TextArea) 可以显示多行文本, 用 户在多行文本框中按回车键会使光标移到下一行行首 表 7-4 列出了 TextArea 类的构造函数 及常用方法 表 7-4 TextArea 类的构造函数及常用方法 构造函数 说明 public TextArea() public TextArea(int rows,int cols) public TextArea(String text) public TextArea(String text, int rows,int cols) 创建一个 TextArea 对象创建一个指定行列的 TextArea 对象创建一个含有指定文本的 TextArea 对象创建一个指定行列并含有指定文本的 TextArea 对象

13 第 7 章 Java 中的 GUI 编程 121 续表 构造函数 说明 创建一个指定行列并含有指定文本及指定滚动条类型的 TextArea 对象,scrollbars 可以取以下 4 个值之一 : Public TextArea(String text,int rows, int cols, int scrollbars) SCROLLBARS_BOTH( 默认 ) SCROLLBARS_VERTICAL_ONLY SCROLLBARS_HORIZONTAL_ONLY SCROLLBARS_NONE public void append(string s) public void insert(string s,int pos) public void settext(string text) public String gettext() public String getselectedtext() Public void seteditable(boolean b) 在多行文本框尾部添加文本在多行文本框指定位置插入文本设置多行文本框的文本内容获取多行文本框的文本内容获取多行文本框中选中的文本内容设置多行文本框的可编辑状态 例 7-4 演示 TextArea 类的常用构造方法 其中一个多行文本框不允许用户进行编辑, 而另一个则允许用户输入信息, 如图 7.8 所示 import java.applet.applet; import java.awt.*; public class TextAreaDemo extends Applet private TextArea textarea1,textarea2; public void init() //creating 2 10*20 TextAreas textarea1=new TextArea("Read-only Text!",10,20); textarea2=new TextArea(10,20); //set textarea1 read-only textarea1.seteditable(false); add(textarea1); add(textarea2); 程序中使用 TextArea 类创建多行文本框 textarea1 和 textarea2 下列语句 : textarea1=new TextArea(""Read-only Text!"",10,20); textarea1=new TextArea(10,20); 用于创建两个多行文本框, 它们都包括 10 行 20 列, 其中,textArea1 初始时显示文本 Read-only Text!,textArea2 初始时未显示任何文本 下列语句 : textarea1.seteditable(false); 使多行文本框 textarea1 不可编辑 ( 你仍然可以把光标置于其中, 但不能修改它的文本 ) 多行文本框总是带有滚动条, 仅当多行文本框中的文本超出其可见范围时, 滚动条才能 滚动 程序员无法直接控制这两个滚动条

14 122 Java 语言程序设计 图 7.8 创建多行文本框示例 复选按钮 JCheckBox 复选框 复选框提供两种状态, 一种是选中, 另一种是未选中, 用户通过单击该组件切换状态 JCheckBox 类常用方法 : public JCheckBox(): 创建一个没有名字的复选框 public JCheckBox(String text): 创建一个名字是 text 的复选框 public JCheckBox(Icon icon): 创建一个带有默认图标 icon, 但没有名字的复选框 public JCheckBox(String text, Icon icon): 创建一个带有默认图标 icon 和名字 text 的复选框 public void seticon(icon defaulticon): 设置复选框上的默认图标 public void setselectedicon(icon selectedicon): 设置复选框选中状态下的图标 public boolean isselected(): 如果复选框处于选中状态该方法返回 true, 否则返回 false 如果不对复选框进行初始化设置, 默认的初始化设置均为未选中 例 7-5 的程序是使用复选框的例子, 当该程序开始运行时, 所有复选框都为非选中状态, 如图 7.9 所示 例 7-5 编写一个程序, 功能是创建 6 个复选框并把它们加入到 applet 中 import java.applet.applet; import java.awt.*; public class MyCheckbox extends Applet private String city[]=" 桂林 "," 福州 "," 青岛 "," 济南 "," 深圳 "," 大连 "; private Checkbox c[] = new Checkbox[6]; public void init() add(new Label(" 请选择是省会的城市 : ")); //Create six Checkboxes and add them to applet for(int i=0;i<6;i++) c[i]=new Checkbox(city[i]); add(c[i]); add(new Label(" 这是一个复选框的例子 "));

15 第 7 章 Java 中的 GUI 编程 123 图 7.9 创建复选框按钮 通过下列语句 : private Checkbox c[]=new Checkbox[6]; 声明了 6 个 Checkbox 引用 通过下列语句 : for(int i=0;i<6;i++) c[i]=new Checkbox(city[i]); add(c[i]); 创建 6 个 Checkbox 对象, 并把它们添加到 applet 中 单选按钮 JRadioButton 单选按钮 单选按钮和复选框很类似, 所不同的是, 在若干个复选框中可以同时选中多个, 而一组单 选按钮同一时刻只能有一个被选中 当创建了若干个单选按钮后, 应使用 ButtonGroup 再创建 一个按钮组对象, 然后利用这个对象把这若干个单选按钮归组 归到同一组的单选按钮每一时 刻只能选一个 例如 : ButtonGroup group=new ButtonGroup(); JRadioButton button1=new JRadioButton(" 小学 "), button2=new JRadioButton(" 中学 "); group.add(button1); group.add(button2); 可以将复选框组合到一起, 成为一组单选按钮, 在这组按钮中, 每次只能选中其中一个 ( 值为 true), 其他复选框都处于未选中状态 ( 即值为 false) 单选按钮由 CheckboxGroup 类 和 Checkbox 类共同创建 CheckboxGroup 类是从 Object 类直接继承的, 因此,CheckboxGroup 对象不能添加到容器中 表 7-5 列出了用于创建单选按钮的构造函数, 其常用方法与复选框 相同 表 7-5 CheckboxGroup 类和 Checkbox 类的构造函数 构造函数 public CheckboxGroup() public Checkbox(String label,checkboxgroup c,boolean state) 说明创建一个 CheckboxGroup 对象创建一个单选按钮, 其标签为 label, 状态为 state, 该单选按钮将添加到 CheckboxGroup c 中 例 7-6 演示单选按钮的创建方法, 运行结果如图 7.10 所示 import java.applet.applet;

16 124 Java 语言程序设计 import java.awt.*; public class RadioButton extends Applet private String city[]=" 北京 "," 上海 "," 西安 "," 重庆 "," 深圳 "," 大连 "; private Checkbox radio[] = new Checkbox[6]; private CheckboxGroup c=new CheckboxGroup(); public void init() add(new Label(" 请选择中国最大的城市 : ")); //Create six radio buttons and add them to applet for(int i=0;i<6;i++) radio[i]=new Checkbox(city[i],c,false); add(radio[i]); add(new Label(" 这是一个单选按钮的例子 ")); 下列语句创建一个 CheckboxGroup 引用 : 图 7.10 创建一组单选按钮 private CheckboxGroup c=new CheckboxGroup(); 下列语句用于对单选按钮进行实例化 : radio[i]=new Checkbox(city[i],c,false); 构造函数的第一个参数是单选按钮的标签, 第二个参数是拥有该单选按钮的 CheckboxGroup, 最后一个参数表示单选按钮的初始状态 在一组单选按钮中, 只能有一个 设置为 true; 但是, 允许将所有单选按钮的初始值都设为 false 如果在同一个 CheckboxGroup 中将多个单选按钮设为 true, 那么只有最后一个设置为 true 的单选按钮是有效的 ( 处于被选中 状态 ) 下拉列表 列表框 (List) 用于显示一系列的选项, 用户可以从中选择一个或多个选项 下拉列表框 (Choice) 与列表框相似, 不同的是下拉列表框只能从列表中选择一个选项, 当用户单击旁边下拉箭头按钮时, 选项列表打开 表 7-6 列出了 List 类及 Choice 类的构造函 数及常用方法

17 第 7 章 Java 中的 GUI 编程 125 表 7-6 List 类和 Choice 类的构造函数及常用方法 构造函数 说明 public List() public List(int items) public List(int items,boolean ms) public Choice() public void add(string item) public String getitem(int index) public int getitemcount() public String[] getitems() public int getselectedindex() public int[] getselectedindexes() public String getselecteditem() public String[] getselecteditems() public void remove(int position) public void remove(string item) public void removeall() public void select(int index) 创建一个 List 对象, 该对象只允许选中一个选项创建一个 List 对象, 选项可见行数由 items 指定创建一个 List 对象, 选项可见行数由 items 指定, 是否可以多选由 ms 指定创建一个 Choice 对象在列表框 / 下拉列表框最后添加一个选项获取列表框 / 下拉列表框指定索引的选项, 索引值从 0 开始获取列表框 / 下拉列表框的项目总数获取列表框的所有选项获取列表框 / 下拉列表框中被选定选项的索引, 索引值从 0 开始, 列表框中若有多个选项被选定, 则返回 -1 获取列表框中所有被选定选项的索引, 索引值从 0 开始获取列表框 / 下拉列表框中被选定的选项, 列表框中若有多个选项被选定, 则返回 null 获取列表框中所有被选定的选项删除列表框 / 下拉列表框指定位置的选项删除列表框 / 下拉列表框中第一个出现且与参数相同的选项删除列表框 / 下拉列表框中所有选项选定列表框 / 下拉列表框中指定索引的选项 例 7-7 演示列表框和下拉列表框的使用 程序运行结果如图 7.11 所示 import java.applet.applet; import java.awt.*; public class ListAndChoiceDemo extends Applet private List citylist; private Choice citychoice; public void init() //create a list with 5 items visible //allow multiple selections citylist=new List(5,true); //add 4 items to the list citylist.add(" 桂林 "); citylist.add(" 福州 "); citylist.add(" 济南 "); citylist.add(" 大连 "); //create a choice citychoice=new Choice(); //add 4 items to the choice

18 126 Java 语言程序设计 citychoice.additem(" 北京 "); citychoice.additem(" 上海 "); citychoice.additem(" 西安 "); citychoice.additem(" 重庆 "); add(new Label(" 中国最大的城市 : ")); add(citychoice); add(new Label(" 省会城市 : ")); add(citylist); 图 7.11 List 类和 Choice 类示例 在实际操作中, 若列表框的可见行数少于列表框总选项数, 则列表框自动添加竖直滚动 条, 在允许多选的情况下, 可以通过鼠标单击选择 / 取消选择一个选项 可以通过列表框 / 下拉列表框的 add 方法或 additem 方法向列表框中添加选项 菜单组件 窗口上方为菜单条, 菜单放在菜单条里, 菜单项放在菜单里 1.JMenuBar 菜单条 JComponent 类的子类 JMenuBar 是负责创建菜单条的, 即 JMenuBar 的一个实例就是一个 菜单条 JFrame 类有一个将菜单条放置到窗口中的方法 : public void setjmenubar(jmenubar menubar); 需要注意的是, 只能向窗口添加一个菜单条 2.JMenu 菜单 JComponent 类的子类 JMenu 类是负责创建菜单的,JMenu 类的主要方法有以下几种 : JMenu(String s): 建立一个指定标题菜单, 标题由参数 s 确定 public void add(menuitem item): 向菜单增加由参数 item 指定的菜单项对象 public void add(string s): 向菜单增加标题为 s 的菜单项 public JMenuItem getitem(int n): 得到指定索引处的菜单项, 第一菜单项的索引为 0 public int getitemcount(): 得到菜单项数目 public void settext(string text): 设置菜单的名字为 text public String gettext(): 获取菜单的名子 3.JMenuItem 菜单项 JMenuItem 是 JMenu 的父类, 该类是负责创建菜单项的, 即 JMenuItem 的一个实例就是

19 第 7 章 Java 中的 GUI 编程 127 一个菜单项, 菜单项将被放在菜单里 JMenuItem 类的主要方法有以下几种 : JMenuItem(String text, Icon icon): 构造有标题和图标的菜单项 为了使得菜单项有一个图 标, 可以用图标类 Icon 声明一个图标, 然后使用其子类 ImageIcon 类创建一个图标, 如 : Icon icon=new mageicon("dog.gif"); JMenuItem(String s): 构造有标题的菜单 public void setenabled(boolean b): 设置当前菜单项是否可被选择 public String getlabel(): 得到菜单项的名字 public void setaccelerator(keystroke keystroke): 为菜单项设置快捷键 为了向该方法的参 数传递一个 KeyStroke 对象, 可以使用 KeyStroke 类的类方法 public static KeyStroke getkeystroke(char keychar): 返回一个 KeyStroke 对象 也可以使用 另一个类方法 public static KeyStroke getkeystroke(int keycode, int modifiers) 返回一个 KeyStroke 对象 其中参数 keycode 取值范围 : KeyEvent.VK_A~KeyEvent.VK_Z ; modifiers 取值为 : InputEvent.ALT_MASK:Alt 键 InputEvent.CTRL_MASK:Ctrl 键 InputEvent.SHIFT_MASK:Shift 键 4. 嵌入子菜单 JMenu 是 JMenuItem 的子类, 因此菜单项本身还可以是一个菜单, 称这样的菜单项为子 菜单 子菜单的创建很简单, 只需创建一个包含若干菜单子项 (JMenuItem) 的菜单 (Jmenu), 将这个菜单如同加入菜单项一样将其加入到上一级菜单, 作为上一级菜单的菜单项即可 例 7-8 创建一个简单的三级菜单 import javax.swing.*; import java.awt.event.inputevent; import java.awt.event.keyevent; class FirstWindow extends JFrame JMenuBar menubar; JMenu menu,item3,itemson3; JMenuItem item1,item2,itemson1,itemson2,red,yellow,blue; FirstWindow(String s) super(s); setsize(160,170); setlocation(120,120); setvisible(true); menubar=new JMenuBar(); menu=new JMenu(" 文件 "); item1=new JMenuItem(" 打开 "); item2=new JMenuItem(" 保存 ");

20 128 Java 语言程序设计 item3=new JMenu(" 工具栏 "); itemson1=new JMenuItem(" 常用 "); itemson2=new JMenuItem(" 格式 "); itemson3=new JMenu(" 颜色 "); red=new JMenuItem(" 红色 "); yellow=new JMenuItem(" 黄色 "); blue=new JMenuItem(" 蓝色 "); itemson3.add(red); itemson3.add(yellow); itemson3.add(blue); item3.add(itemson1); item3.add(itemson2); item3.add(itemson3); menu.add(item1); menu.add(item2); menu.addseparator(); menu.add(item3); menubar.add(menu); setjmenubar(menubar); validate(); setdefaultcloseoperation(jframe.dispose_on_close); public class Example public static void main(string args[]) FirstWindow win=new FirstWindow(" 一个简单的窗口 "); 7.3 布局管理 当把组件添加到容器中时, 总希望控制组件在容器中的位置, 这就需要进行布局设计 java.awt 包中的常用策略有 4 种类型 :FlowLayout BorderLayout CardLayout GridLayout 布局类和 java.swing.border 包中有 BoxLayout 布局类 对于 JFrame 窗口, 程序只能将组件添加到它的内容面板中 JFrame 的内容面板是一个 Container 类型的对象, 即容器 JFame 窗体通过调用方法 getcontentpane() 创建该内容面板的对象, 内容面板的默认布局是 BorderLayout 容器可以使用方法 setlayout( 布局对象 ) 来设置自己的布局

21 第 7 章 Java 中的 GUI 编程 流式布局 (FlowLayout 布局 ) FlowLayout 类创建的对象称做 FlowLayout 型布局,FlowLayout 类的一个常用构造方法如下 : FlowLayout() 该构造方法可以创建一个居中对齐的布局对象 例如 : FlowLayout flow=new FlowLayout(); 如果一个容器 con 使用这个布局对象 : con.setlayout(flow); 那么,con 可以使用 Container 类提供的 add 方法将组件顺序地添加到容器中, 组件按照 加入的先后顺序从左向右排列, 一行排满之后就转到下一行继续从左至右排列, 每一行中的组 件都居中排列, 组件之间默认的水平和垂直间隙是 5 个像素 FlowLayout 布局对象调用 setalignment(int aligin) 方法可以重新设置布局的对齐方式, 其 中 aligin 可以取值 FlowLayout.LEFT FlowLayout.CENTER FlowLayout.RIGHT FlowLayout 布局对象调用 sethgap(int hgap) 和 setvgap(int vgap) 可以重新设置布局的水平 间隙和垂直间隙 例 7-9 编写一个程序, 功能是创建 10 个按钮并按照流布局的方式放置到内容面板中 运行效果如图 7.12 所示 import java.awt.*; import javax.swing.*; class WindowFlow extends JFrame WindowFlow(String s) class k super(s); Container contenetpane=this.getcontentpane(); FlowLayout flow=new FlowLayout(); flow.setalignment(flowlayout.left); flow.sethgap(2); flow.setvgap(8); contenetpane.setlayout(flow); for(int i=1;i<=10;i++) contenetpane.add(new JButton("i am "+i)); contenetpane.validate(); setbounds(100,100,150,120); setvisible(true); setdefaultcloseoperation(jframe.dispose_on_close);

22 130 Java 语言程序设计 public static void main(string args[]) WindowFlow win=new WindowFlow("FlowLayout 布局窗口 "); 图 7.12 使用 FlowLayou 布局的窗口 边界布局 (BorderLayout 布局 ) BorderLayout 布局是 Window 型容器的默认布局, 例如 JFrame JDialog 都是 Window 类 的间接子类, 它们的内容面板的默认布局都是 BorderLayout 布局 BorderLayout 也是一种简单的布局策略, 如果一个容器使用这种布局, 那么容器空间简单 地划分为东 西 南 北 中五个区域, 中间的区域最大 每加入一个组件都应该指明把这个 组件添加在哪个区域中, 区域由 BorderLayout 中的静态常量 CENTER NORTH WEST SOUTH EAST 表示, 例如, 一个使用 BorderLayout 布局的容器 con, 可以使用 add 方法将 一个组件 b 添加到中心区域 : con.add(b,borderlayout.center); 添加到某个区域的组件将占据整个这个区域 每个区域只能放置一个组件, 如果向某个 已放置了组件的区域再放置一个组件, 那么先前的组件将被后者替换掉 注意, 容器每增加或删除组件后都要调用 validate() 方法以保证能正确地显示修改后的内 容, 其实质相当于 刷新 例 7-10 编写一个程序, 功能是创建 4 个按钮和一个文本域, 按照边界布局的方式放 置到内容面板中 运行效果如图 7.13 所示 import javax.swing.*; import java.awt.*; class k public static void main(string args[]) JFrame win=new JFrame(" 窗体 "); win.setbounds(100,100,300,300); win.setvisible(true); JButton bsouth=new JButton(" 南 "), bnorth=new JButton(" 北 "),

23 第 7 章 Java 中的 GUI 编程 131 beast =new JButton(" 东 "), bwest =new JButton(" 西 "); JTextArea bcenter=new JTextArea(" 中心 "); Container contenetpane=win.getcontentpane(); contenetpane.add(bnorth,borderlayout.north); contenetpane.add(bsouth,borderlayout.south); contenetpane.add(beast,borderlayout.east); contenetpane.add(bwest,borderlayout.west); contenetpane.add(bcenter,borderlayout.center); contenetpane.validate(); win.setdefaultcloseoperation(jframe.exit_on_close); 图 7.13 使用 BorderLayout 布局的窗口 卡式布局 (CardLayout 布局 ) 使用 CardLayout 的容器可以容纳多个组件, 但实际上同一时刻容器只能从这些组件中选出一个来显示, 就像一叠 扑克牌 每次只能显示最上面的一张一样, 这个被显示的组件将占据所有的容器空间 JTabbedPane 创建的对象是一个轻容器, 称作选项卡窗格 选项卡窗格的默认布局是 CardLayout 卡片式布局 JTabbedPane 容器自带一些选项卡, 这些选项卡和容器中添加的组件相对应, 也就是说, 单击相应的选项卡时, 选项卡窗格将显示对应的组件 选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部, 从左向右依次排列, 选项卡的顺序和容器添加的组件的顺序相同 选项卡窗格可以使用 add(string text,component c); 方法将组件 c 添加到容器当中, 并指定和该组件 c 对应的选项卡的文本提示是 text 例 7-11 编写一个程序, 功能是 : 在选项卡窗格中添加了 5 个按钮, 并设置了相对应的选项卡的文本提示, 然后将选项卡窗格添加到窗体的内容面板中 运行效果如图 7.14 所示 import javax.swing.*; import java.awt.*; class MyWin extends JFrame

24 132 Java 语言程序设计 JTabbedPane p; public MyWin() setbounds(100,100,500,300); setvisible(true); p=new JTabbedPane(JTabbedPane.LEFT); for(int i=1;i<=5;i++) p.add(" 观看第 "+i+" 个按钮 ",new JButton(" 按钮 "+i)); p.validate(); Container con=getcontentpane(); con.add(p,borderlayout.center); con.validate(); setdefaultcloseoperation(jframe.dispose_on_close); class k public static void main(string args[]) new MyWin(); 图 7.14 嵌套 JTabedPane 的窗体 网格布局 (GridLayout 布局 ) GridLayout 是使用较多的布局编辑器, 其基本布局策略是把容器划分成若干行乘若干列的网格区域, 组件就位于这些划分出来的小格中 GridLayout 比较灵活, 划分多少网格由程序自由控制, 而且组件定位也比较精确 使用 GridLayout 布局编辑器的一般步骤如下 : (1) 使用构造方法 GridLayout(int m,int n) 创建布局对象, 指定划分网格的行数 m 和列数 n

25 第 7 章 Java 中的 GUI 编程 133 (2) 使用 GridLayout 布局的容器调用方法 add 将组件加入容器, 组件进入容器的顺序将按照第一行第一个 第一行第二个 第一行最后一个 第二行第一个 最后一行第一个 最后一行最后一个 使用 GridLayout 布局的容器最多可添加 m n 个组件 GridLayout 布局中每个网格都是相同大小并且强制组件与网格的大小相同, 这显然很不实用 为了克服此缺点, 可以使用容器嵌套 GridLayout 布局中的每个网格都可以添加容器, 而这个容器又可以设置为其他布局策略, 如 GridLayout FlowLayout CarderLayout 或 BorderLayout 布局等 利用这种嵌套方法, 可以设计出符合一定需要的布局 盒式布局 (BoxLayout 布局 ) 用 BoxLayout 类可以创建一个布局对象, 称为盒式布局 BoxLayout 在 java.swing.border 包中 java swing 包提供了 Box 类, 该类也是 Container 类的一个子类, 创建的容器称作一个盒式容器, 盒式容器的的默认布局是盒式布局, 而且不允许更改布局策略 因此, 在策划程序的布局时, 可以利用容器的嵌套将某个容器嵌入几个盒式容器, 达到合理安排盒式布局的目的 即无需显示使用盒式布局, 只要使用几个盒式容器就可实现盒式布局 使用盒式布局的容器将组件排列在一行或一列, 这取决于创建盒式布局对象时, 是否指定了是行排列还是列排列 BoxLayout 的构造方法 BoxLayout(Container con,int axis) 可以创建一个盒式布局对象, 并指定容器 con 使用该布局对象, 参数 axis 设置按行或按列排 其可取值 X_AXIS( 按行排 ) 或 Y_AXIS( 按列排 ) 与 FlowLayout 布局不同的是, 其只有一行或一列, 不会出现第二行或第二列 行型盒式布局容器中添加的组件的上沿在同一水平线上 列型盒式布局容器中添加的组件的左沿在同一垂直线上 使用 Box 类的类方法 createhorizontalbox() 可以获得一个具有行型盒式布局的盒式容器 ; 使用 Box 类的类方法 createverticalbox() 可以获得一个具有列型盒式布局的盒式容器 如果想控制盒式布局容器中组件之间的距离, 就需要使用水平支撑或垂直支撑 Box 类调用类方法 createhorizontalstrut(int width) 可以得到一个不可见的水平 Struct 类型对象, 称做水平支撑 该水平支撑的高度为 0, 宽度是 width Box 类调用类方法 createvertialstrut(int height) 可以得到一个不可见的垂直 Struct 类型对象, 称做垂直支撑 参数 height 决定垂直支撑的高度, 垂直支撑的宽度为 0 例 7-12 编写一个程序, 功能是 : 首先创建一个内容容器 con, 设置其布局为流式布局 ; 再在其中加入一个具有行盒式布局的盒式容器 basebox; 然后在 basebox 中加入两个具有列型盒式布局的盒式容器 boxv1 boxv2, 并在它们之间加入一个水平支撑对象 ; 最后再分别在 boxv1 和 boxv2 中加入组件, 并在组件之间加入垂直支撑对象 其运行效果如图 7.15 所示 import javax.swing.*; import java.awt.*; import javax.swing.border.*; class WindowBox extends JFrame

26 134 Java 语言程序设计 Box basebox,boxv1,boxv2; WindowBox() boxv1=box.createverticalbox(); boxv1.add(new JLabel(" 输入您的姓名 ")); boxv1.add(box.createverticalstrut(8)); boxv1.add(new JLabel(" 输入 ")); boxv1.add(box.createverticalstrut(8)); boxv1.add(new JLabel(" 输入您的职业 ")); boxv2=box.createverticalbox(); boxv2.add(new JTextField(16)); boxv2.add(box.createverticalstrut(8)); boxv2.add(new JTextField(16)); boxv2.add(box.createverticalstrut(8)); boxv2.add(new JTextField(16)); basebox=box.createhorizontalbox(); basebox.add(boxv1); basebox.add(box.createhorizontalstrut(10)); basebox.add(boxv2); Container con=getcontentpane(); con.setlayout(new FlowLayout()); con.add(basebox); con.validate(); setbounds(120,125,200,200); setvisible(true); setdefaultcloseoperation(jframe.exit_on_close); public class k public static void main(string args[]) new WindowBox();

27 第 7 章 Java 中的 GUI 编程 135 图 7.15 嵌套 Box 容器的窗体 空布局 (null 布局 ) 可以把一个容器的布局设置为 null 布局 ( 空布局 ) 容器采用空布局, 借助方法 setbounds(int a, int b, int width, int height) 可以准确地定位组件在容器的位置和大小 例如,con 是某个容器 : con.setlayout(null); 把 con 的布局设置为空布局 向空布局的容器 con 添加一个组件 c 需要两个步骤, 首先使用 add(c) 方法向容器添加 组件, 然后组件 c 再调用 setbounds(int a,int b,int width,int height) 方法设置该组件在容 器中的位置和本身的大小 由于组件都是一个矩形结构, 所以方法中的参数 a b 是被添加的 组件 c 的左上角在容器中的位置坐标, 即该组件距容器左面 a 个像素, 距容器上方 b 个像素 ; weidth height 是组件 c 的宽和高 7.4 用户事件 图形用户界面通过事件机制响应用户和程序的交互 产生事件的组件称为事件源 如当用户单击某个按钮时就会产生动作事件, 该按钮就是事件源 要处理产生的事件, 需要在特定的方法中编写处理事件的程序 这样, 当产生某种事件时就会调用处理这种事件的方法, 从而实现用户与程序的交互, 这就是图形用户界面事件处理的基本原理 事件基本概念与 AWT 有关的所有事件类都由 java.awt.awtevent 类派生, 它也是 EventObject 类的子类 AWT 事件共有 10 类, 可以归为两大类 : 低级事件和高级事件 java.util.eventobject 类是所有事件对象的基础父类, 所有事件都是由它派生出来的 AWT 的相关事件继承于 java.awt.awtevent 类, 这些 AWT 事件分为两大类 : 低级事件和高级事件 低级事件是指基于组件和容器的事件, 当一个组件上发生事件, 如鼠标的进入 点击 拖放等, 或组件的窗口开关等, 触发了组件事件 高级事件是基于语义的事件, 它可以不和特定的动作相关联, 而依赖于触发此事件的类, 如在 TextField 中按 Enter 键会触发 ActionEvent 事件, 滑动滚动条会触发 AdjustmentEvent 事件, 或是选中项目列表的某一条就会触发 ItemEvent 事件 1. 低级事件 ComponentEvent( 组件事件 : 组件尺寸的变化, 移动 ) ContainerEvent( 容器事件 : 组件增加, 移动 ) WindowEvent( 窗口事件 : 关闭窗口, 窗口闭合, 图标化 )

28 136 Java 语言程序设计 FocusEvent( 焦点事件 : 焦点的获得和丢失 ) KeyEvent( 键盘事件 : 键按下 释放 ) MouseEvent( 鼠标事件 : 鼠标单击, 移动 ) 2. 高级事件 ( 语义事件 ) ActionEvent( 动作事件 : 按钮按下,TextField 中按 Enter 键 ) AdjustmentEvent( 调节事件 : 在滚动条上移动滑块以调节数值 ) ItemEvent( 项目事件 : 选择项目, 不选择 项目改变 ) TextEvent( 文本事件, 文本对象改变 ) 焦点事件 组件可以触发焦点事件 组件可以使用 public void addfocuslistener(focuslistener listener) 增加焦点事件监视器 当组件具有焦点监视器后, 如果组件从无输入焦点变成有输入焦点或从 有输入焦点变成无输入焦点都会触发 FocusEvent 事件 创建焦点监视器的类必须要实现 FocusListener 接口, 该接口有两个方法 : public void focusgained(focusevent e) public void focuslost(focusevent e) 当组件从无输入焦点变成有输入焦点触发 FocusEvent 事件时, 监视器调用类实现的接口 方法 focusgained(focusevent e); 当组件从有输入焦点变成无输入焦点触发 FocusEvent 事件时, 监视器调用类实现的接口方法 focuslost(focusevent e) 一个组件调用以下方法可以获得输入焦点 : public boolean requestfocusinwindow() 调用以下方法可以将焦点移到下一个组件 : public void transferfocus() 例 7-13 编写一个程序, 功能是 : 监视器监视组件上的焦点事件, 当组件获得焦点时 组件的颜色变成蓝色, 当失去焦点时, 组件的颜色变成红色 运行效果如图 7.16 所示 import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyWindow extends JFrame implements FocusListener JTextField text; JButton button; MyWindow(String s) super(s); text=new JTextField(10); button=new JButton(" 按钮 "); text.requestfocusinwindow(); Container con=getcontentpane(); con.setlayout(new FlowLayout()); con.add(text);

29 第 7 章 Java 中的 GUI 编程 137 con.add(button); text.addfocuslistener(this); button.addfocuslistener(this); setbounds(100,100,150,150); setvisible(true); validate(); setdefaultcloseoperation(jframe.exit_on_close); public void focusgained(focusevent e) JComponent com=(jcomponent)e.getsource(); com.setbackground(color.blue); public void focuslost(focusevent e) JComponent com=(jcomponent)e.getsource(); com.setbackground(color.red); class k public static void main(string args[]) MyWindow win=new MyWindow(" 窗口 "); 图 7.16 焦点事件的窗体 键盘事件在 Java1.2 事件模式中, 必须要有发生事件的事件源 当一个组件处于激活状态时, 组件可以成为触发 KeyEvent 事件的事件源 当某个组件处于激活状态时, 如果用户敲击键盘上一个键就导致这个组件触发 KeyEvent 事件 1. 使用 KeyListener 接口处理键盘事件组件使用 addkeylistener 方法获得监视器 该接口包含三个方法 : public void KeyPressed(KeyEvent e) public void KeyReleased(KeyEvent e)

30 138 Java 语言程序设计 public void KeyTyped(KeyEvent e) 当按下键盘上某个键时, 监视器就会发现, 然后方法 KeyPressed 会自动执行, 并且 KeyEvent 类自动创建一个键盘事件对象传递给方法 KeyPressed 中的参数 e 方法 KeyTyped 是 Pressedkey 和 KeyReleased 方法的组合, 当键被按下又释放时,KeyTyped 方法被调用 用 KeyEvent 类的 public int getkeycode() 方法, 可以判断哪个键被按下 敲击或释放, getkeycode 方法返回一个键码值 例 7-14 编写一个程序, 功能是通过处理键盘事件来实现软件序列号的输入 当文本 框获得输入焦点后, 用户敲击键盘将使得当前文本框触发 KeyEvent 事件, 在处理事件时, 程 序检查文本框中光标的位置, 如果光标已经到达指定位置, 就将输入焦点转移到下一个文本框 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win extends JFrame implements KeyListener JTextField text[]=new JTextField[3]; Container con; Win() con=getcontentpane(); con.setlayout(new FlowLayout()); for(int i=0;i<3;i++) text[i]=new JTextField(12); text[i].addkeylistener(this); con.add(text[i]); text[0].requestfocusinwindow(); setdefaultcloseoperation(jframe.exit_on_close); setbounds(10,10,300,300); setvisible(true); validate(); public void keypressed(keyevent e) JTextField text=(jtextfield)e.getsource(); if(text.getcaretposition()>=6) text.transferfocus(); public void keytyped(keyevent e) public void keyreleased(keyevent e)

31 第 7 章 Java 中的 GUI 编程 139 public class k public static void main(string args[]) Win win=new Win(); 2. 处理复合键 键盘事件 KeyEvent 对象调用 getmodifiers() 方法, 可以返回下列的整数值, 它们分别是 InputEvent 类的类常量 :ALT_MASK CTRL_MASK SHIFT_MASK 程序可以根据 getmodifiers() 方法返回的值处理复合键事件 例如, 对于 KeyEvent 对象 e, 当使用 Ctrl+X 时, 下面的逻辑表达式为 true: e.getmodifiers()==inputevent.ctrl_mask&&e.getkeycode()==keyevent.vk_v 例 7-15 编写一个程序, 功能是用户通过复合键 CTRL+C CTRL+X 和 CTRL+V 实现 文本区内容的拷贝 剪切和粘贴 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win extends JFrame implements KeyListener JTextArea text; Win() Container con=getcontentpane(); con.setlayout(new FlowLayout()); text=new JTextArea(30,20); text.addkeylistener(this); con.add(new JScrollPane(text),BorderLayout.CENTER); setdefaultcloseoperation(jframe.exit_on_close); setbounds(10,10,300,300); setvisible(true); validate(); public void keytyped(keyevent e) JTextArea te=(jtextarea)e.getsource(); if(e.getmodifiers()==inputevent.ctrl_mask&&e.getkeycode()==keyevent.vk_x) te.cut(); else if(e.getmodifiers()==inputevent.ctrl_mask&&e.getkeycode()==keyevent.vk_c)

32 140 Java 语言程序设计 te.copy(); else if(e.getmodifiers()==inputevent.ctrl_mask&&e.getkeycode()==keyevent.vk_v) te.paste(); public void keypressed(keyevent e) public void keyreleased(keyevent e) public class k public static void main(string args[]) Win win=new Win(); 鼠标事件 1. 鼠标事件的触发组件是可以触发鼠标事件的事件源 用户的以下 7 种操作都可以使得组件触发鼠标事件 : 鼠标指针从组件之外进入 鼠标指针从组件内退出 鼠标指针停留在组件上时, 按下鼠标 鼠标指针停留在组件上时, 释放鼠标 鼠标指针停留在组件上时, 单击鼠标 在组件上拖动鼠标指针 在组件上运动鼠标指针 鼠标事件的类型是 MouseEvent, 即组件触发鼠标事件时,MouseEvent 类自动创建一个事件对象 2.MouseListener 与 MouseMotionListener 接口 Java 分别使用两个接口来处理鼠标事件 (1)MouseListener 接口 如果事件源使用 addmouselistener(mouselistener listener) 获取监视器, 那么用户的以下 5 种操作可使得事件源触发鼠标事件 : 鼠标指针从组件之外进入 鼠标指针从组件内退出 鼠标指针停留在组件上面时, 按下鼠标 鼠标指针停留在组件上面时, 释放鼠标 鼠标指针停留在组件上面时, 单击或连续单击鼠标

33 第 7 章 Java 中的 GUI 编程 141 创建监视器的类必须要实现 MouseListener 接口, 该接口有 5 个方法 : mousepressed(mouseevent e): 负责处理鼠标按下触发的鼠标事件 mousereleased(mouseevent e): 负责处理鼠标释放触发的鼠标事件 mouseentered(mouseevent e): 负责处理鼠标进入组件触发的鼠标事件 mouseexited(mouseevent e): 负责处理鼠标退出组件触发的鼠标事件 mouseclicked(mouseevent e): 负责处理鼠标单击或连击触发的鼠标事件 (2)MouseMotionListener 接口 如果事件源使用 addmousemotionlistener(mousemotion Listener listener) 获取监视器, 那么用户的以下两种操作可使得事件源触发鼠标事件 : 在组件上拖动鼠标指针 在组件上运动鼠标指针 相应的有两个处理接口的方法 : mousedragged(mouseevent e): 负责处理鼠标拖动事件 mousemoved(mouseevent e): 负责处理鼠标移动事件 3.MouseEvent 类在处理鼠标事件时, 程序经常关注鼠标在当前组件坐标系中的位置, 以及触发鼠标事件使用的是鼠标的左键或右键等信息 MouseEvent 类中有下列几个重要的方法 : getx() 鼠标事件调用该方法返回触发当前鼠标事件时, 鼠标指针在事件源坐标系中的 x 坐标 gety() 鼠标事件调用该方法返回触发当前鼠标事件时, 鼠标指针在事件源坐标系中的 y 坐标 getclickcount() 鼠标事件调用该方法返回鼠标被连续单击的次数 getmodifiers() 鼠标事件调用该方法返回一个整数值, 如果是通过鼠标左键触发的鼠标事件, 该方法返回的值等于 InputEvent 类中的类常量 BUTTON1_MASK; 如果是右键, 返回的是类常量 BUTTON3_MASK getsource() 鼠标事件调用该方法返回触发当前鼠标事件的事件源 例 7-16 编写一个程序, 功能是 : 分别监视按钮 标签和窗口内容面板上的鼠标事件, 当发生鼠标事件时, 获取鼠标的坐标值, 注意, 事件源的坐标系的左上角是原点 import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyWindow extends JFrame implements MouseListener JButton button; JTextArea textarea; Container con; MyWindow() con=getcontentpane(); con.setlayout(new FlowLayout()); con.addmouselistener(this);

34 142 Java 语言程序设计 button=new JButton(" 我是按钮 "); button.addmouselistener(this); textarea=new JTextArea(8,28); con.add(button); con.add(new JScrollPane(textArea)); setbounds(100,100,150,150); setvisible(true); validate(); setdefaultcloseoperation(jframe.exit_on_close); public void mousepressed(mouseevent e) textarea.append("\n 鼠标按下, 位置 :"+"("+e.getx()+","+e.gety()+")"); public void mousereleased(mouseevent e) if(e.getsource()==button) textarea.append("\n 在按钮上鼠标放开, 位置 :"+"("+e.getx()+","+e.gety()+")"); public void mouseentered(mouseevent e) if(e.getsource()==button) textarea.append("\n 鼠标进入按钮, 位置 :"+"("+e.getx()+","+e.gety()+")"); public void mouseexited(mouseevent e) if(e.getsource()==con) textarea.append("\n 在鼠标离开容器, 位置 :"+"("+e.getx()+","+e.gety()+")"); public void mouseclicked(mouseevent e) if(e.getmodifiers()==inputevent.button3_mask&&e.getclickcount()>=2) textarea.settext(" 你双击了鼠标右键 "); class k

35 第 7 章 Java 中的 GUI 编程 143 public static void main(string args[]) MyWindow win=new MyWindow(); 4. 鼠标位置的坐标变换 容器中的一个组件触发鼠标事件后, 鼠标事件 e 调用 getx() 和 gety() 方法可以返回鼠标指 针在事件源坐标系中的坐标 有时, 程序可能还需要知道鼠标指针在容器坐标系中的坐标, 这 就需要进行坐标变换 可以使用 Java.Swing 包中的 SwingUtilities 类的类方法 : public static Point convertpoint(component source, int x, int y,component destination) 根据鼠标指针在当前事件源 source 坐标系中的坐标 (x,y), 得到鼠标在容器 destination 坐标 系中的坐标, 该方法返回一个 Point 对象, 该对象再调用 getx() 和 gety() 方法就可以获取鼠标 在容器 destination 坐标系中的坐标 生改变 例 7-17 编写一个程序, 功能是用户使用鼠标拖动按钮来使该组件在容器中的位置发 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win extends JFrame implements MouseMotionListener,MouseListener JButton button[]=new JButton[6]; JTextField text; JLayeredPane layerpane; Container con; int xr,yr; Win() layerpane=new JLayeredPane(); layerpane.setlayout(new FlowLayout()); con=getcontentpane(); con.add(layerpane,borderlayout.center); for(int i=0;i<button.length;i++) button[i]=new JButton(" 用鼠标拖动我 "+i); button[i].addmousemotionlistener(this); button[i].addmouselistener(this); layerpane.add(button[i],jlayeredpane.default_layer); con.addmousemotionlistener(this); setbounds(10,10,300,300); setvisible(true);

36 144 Java 语言程序设计 validate(); setdefaultcloseoperation(jframe.exit_on_close); public void mousemoved(mouseevent e) public void mousedragged(mouseevent e) JComponent source=(jcomponent)e.getsource(); layerpane.setlayer(source,jlayeredpane.drag_layer); int x=e.getx(); int y=e.gety(); java.awt.point point=swingutilities.convertpoint(source,x,y,con); int x1=(int)point.getx(); // 获取鼠标指针在容器坐标系中的坐标 int y1=(int)point.gety(); int w=source.getsize().width; int h=source.getsize().height; source.setlocation(x1-xr,y1-yr); // 鼠标当前位置减去按钮左上角距离鼠标位置的水平与竖直距离 // 即是按钮的当前位置 public void mousereleased(mouseevent e) JComponent source=(jcomponent)e.getsource(); layerpane.setlayer(source,jlayeredpane.default_layer); public void mousepressed(mouseevent e) JComponent source=(jcomponent)e.getsource(); xr=e.getx(); // 获取鼠标被按下时相对于按钮坐标系的坐标 yr=e.gety(); // 即按钮左上角距离鼠标位置的水平与竖直距离 public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mouseclicked(mouseevent e) public class k public static void main(string args[]) Win win=new Win(); 5. 鼠标事件的转移 假如我们正监视一个容器上的鼠标事件, 而容器中添加了一些组件, 则当在组件上进行 单击鼠标 移动鼠标等操作时, 容器将不知道这些操作的发生 这时可以使用 javax.swing 包 中的 SwingUtilities 类的静态方法 MouseEvent convertmouseevent(component source, MouseEvent sourceevent, Component destination) 使 sourceevent 鼠标事件从 source 事件源转移到

37 第 7 章 Java 中的 GUI 编程 145 destination 事件源上 ( 声东击西 ) 例 7-18 编写一个程序, 功能是 : 模拟扫雷游戏, 当在一个组件上按下鼠标时, 同样的事情也就会发生在某些其他组件上 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; class Win extends JFrame implements MouseListener JLabel b[]=new JLabel[12]; Icon icongreen=new ImageIcon("click.gif"), iconred=new ImageIcon(" 红心.gif"); Win() Container con=getcontentpane(); con.setlayout(new GridLayout(3,4)); for(int i=0;i<b.length;i++) b[i]=new JLabel(iconGreen); con.add(b[i]); b[i].addmouselistener(this); b[i].setborder(borderfactory.createbevelborder( BevelBorder.RAISED,Color.red,Color.white)); setdefaultcloseoperation(jframe.exit_on_close); setbounds(10,10,380,300); setvisible(true); validate(); public void mousepressed(mouseevent e) JLabel label=(jlabel)e.getsource(); label.seticon(iconred); int m=(int)(math.random()*b.length); e=swingutilities.convertmouseevent(label,e,b[m]);// 转移鼠标事件随机转移到一个组件 if(e.getsource()==b[m]) b[m].seticon(iconred); public void mousereleased(mouseevent e) for(int i=0;i<b.length;i++)

38 146 Java 语言程序设计 b[i].seticon(icongreen); public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mouseclicked(mouseevent e) public class k public static void main(string args[]) Win win=new Win(); 6. 获取鼠标在系统桌面上的坐标 SDK1.5 在 java.awt 包中新增了一个类 PointerInfo, 该类可以帮助程序获取鼠标指针在系 统图形设备中的位置坐标 使用 PointerInfo 的类方法 getpointerinfo() 可以实例化一个 PointerInfo 对象 例如 : PointerInfo pi=mouseinfo.getpointerinfo(); PointerInfo 对象调用 Point getlocation(); 方法返回一个 Point 对象, 对象再调用 getx() 和 gety() 返回鼠标在桌面上的坐标值 需要注意的是, 当鼠标运动时, 必须及时更新 PointerInfo 对象, 因为 PointerInfo 对象中存储的 Point 对象不会自动更新 7. 弹出式菜单 单击鼠标右键出现 弹出式菜单 是用户熟悉和常用的操作 弹出式菜单由 JPopupMenu 类负责创建, 可以用下列构造方法创建弹出式菜单 : public JPopupMenu(): 构造无标题弹出式菜单 public JPopupMenu(String label) 构造由参数 label 指定标题的弹出式菜单 通过调用 public void show(component invoker, int x, int y) 方法设置弹出式菜单在组件 invoker 上的弹出的位 置, 位置坐标 (x,y) 按 invoker 的坐标系 例 7-19 编写一个程序, 功能是 : 在文本区上单击右键时, 在鼠标位置处弹出菜单, 用户选择相应的菜单项可以将文本区中选中的内容复制 剪切到系统的剪贴板中或将剪贴板中 的文本内容粘贴到文本区 import javax.swing.*; import java.awt.event.*; import java.awt.*; class EditWindow extends JFrame implements ActionListener JPopupMenu menu; JMenuItem itemcopy,itemcut,itempaste; JTextArea text; EditWindow(String s)

39 第 7 章 Java 中的 GUI 编程 147 super(s); setsize(260,270); setlocation(120,120); setvisible(true); menu=new JPopupMenu(" 弹出式菜单 "); itemcopy=new JMenuItem(" 拷贝 "); itemcut=new JMenuItem(" 剪切 "); itempaste=new JMenuItem(" 粘贴 "); menu.add(itemcopy); menu.add(itemcut); menu.add(itempaste); text=new JTextArea(); text.addmouselistener(new MouseAdapter() public void mousepressed(mouseevent e) if(e.getmodifiers()==inputevent.button3_mask) menu.show(text,e.getx(),e.gety()); ); setdefaultcloseoperation(jframe.dispose_on_close); Container con=getcontentpane(); con.add(new JScrollPane(text),BorderLayout.CENTER); con.validate(); validate(); itemcopy.addactionlistener(this); itemcut.addactionlistener(this); itempaste.addactionlistener(this); public void actionperformed(actionevent e) if(e.getsource()==itemcopy) text.copy(); else if(e.getsource()==itemcut) text.cut(); else if(e.getsource()==itempaste) text.paste(); public class k

40 148 Java 语言程序设计 public static void main(string args[]) EditWindow win=new EditWindow(" 窗口 "); 关于监听者的总结 JDK1.1 之后 Java 采用的是事件源 事件监听者模型, 引发事件的对象称为事件源, 而 接收并处理事件的对象是事件监听者, 无论应用程序还是小程序都采用这一机制 引入事件处理机制后的编程基本方法如下 : (1) 对 java.awt 中组件实现事件处理必须使用 java.awt.event 包, 所以在程序开始应加入 import java.awt.event.* 语句 方法 (2) 用如下语句设置事件监听者 : 事件源.add XXListener XXListener 代表某种事件监听者 (3) 事件监听者所对应的类实现事件所对应的接口 XXListener, 并重写接口中的全部 这样就可以处理图形用户界面中的对应事件了, 要删除事件监听者可以使用语句 : 事件源.remove XXListener 1. 事件监听器 每类事件都有对应的事件监听器, 监听器是接口, 根据动作来定义方法 例如, 与键盘事件 KeyEvent 相对应的接口是 : public interface KeyListener extends EventListener public void keypressed(keyevent ev); public void keyreleased(keyevent ev); public void keytyped(keyevent ev); 注意到在本接口中有 3 个方法, 那么 Java 运行时系统何时调用哪个方法? 其实根据这 3 个方法的方法名就能够知道应该是什么时候调用哪个方法执行了 当键盘刚按下时, 将调用 keypressed() 方法执行, 当键盘抬起来时, 将调用 keyreleased() 方法执行, 当键盘敲击一次时, 将调用 keytyped() 方法执行 又例如窗口事件接口 : public interface WindowListener extends EventListener public void windowclosing(windowevent e); // 把退出窗口的语句写在本方法中 public void windowopened(windowevent e); // 窗口打开时调用 public void windowiconified(windowevent e); // 窗口图标化时调用

41 第 7 章 Java 中的 GUI 编程 149 public void windowdeiconified(windowevent e); // 窗口非图标化时调用 public void windowclosed(windowevent e); // 窗口关闭时调用 public void windowactivated(windowevent e); // 窗口激活时调用 public void windowdeactivated(windowevent e); // 窗口非激活时调用 AWT 的组件类中提供注册和注销监听器的方法 : 注册监听器 : public void add<listenertype> (<ListenerType>listener); 注销监听器 : public void remove<listenertype> (<ListenerType>listener); 例如 Button 类 : public class Button extends Component public synchronized void addactionlistener(actionlistener l); public synchronized void removeactionlistener(actionlistener l); Java 将所有组件可能发生的事件进行分类, 具有共同特征的事件被抽象为一个事件类 AWTEvent, 其中包括 ActionEvent 类 ( 动作事件 ) MouseEvent 类 ( 鼠标事件 ) KeyEvent 类 ( 键盘事件 ) 等 表 7-7 列出了常用 Java 事件类 处理该事件的接口及接口中的方法 表 7-7 常用 Java 事件类 处理该事件的接口及接口中的方法 事件类 / 接口名称 ActionEvent 动作事件类 ActionListener 接口 AdjustmentEvent 调整事件类 AdjustmentListener 接口 ComponentEvent 组件事件类 ComponentListener 接口 ContainerEvent 容器事件类 ContainerListener 接口 FocusEvent 焦点事件类 FocusListener 接口 ItemEvent 选择事件类 ItemListener 接口 接口方法及说明 actionperformed(actionevent e) 单击按钮 选择菜单项或在文本框中按回车时 adjustmentvaluechanged(adjustmentevent e) 当改变滚动条滑块位置时 componentmoved(componentevent e) 组件移动时 componenthidden(componentevent e) 组件隐藏时 componentresized(componentevent e) 组件缩放时 componentshown(componentevent e) 组件显示时 componentadded(containerevent e) 添加组件时 componentremoved(containerevent e) 移除组件时 focusgained(focusevent e) 组件获得焦点时 focuslost(focusevent e) 组件失去焦点时 itemstatechanged(itemevent e) 选择复选框 选项框 单击列表框 选中带复选框菜单时

42 150 Java 语言程序设计 续表 事件类 / 接口名称 KeyEvent 键盘事件类 KeyListener 接口 MouseEvent 鼠标事件类 MouseListener 接口 MouseEvent 鼠标移动事件类 MouseMotionListener 接口 TextEvent 文本事件类 TextListener 接口 WindowEvent 窗口事件类 WindowListener 接口 接口方法及说明 keypressed(keyevent e) 键按下时 keyreleased(keyevent e) 键释放时 keytyped(keyevent e) 击键时 mouseclicked(mouseevent e) 单击鼠标时 mouseentered(mouseevent e) 鼠标进入时 mouseexited(mouseevent e) 鼠标离开时 mousepressed(mouseevent e) 鼠标键按下时 mousereleased(mouseevent e) 鼠标键释放时 mousedragged(mouseevent e) 鼠标拖放时 mousemoved(mouseevent e) 鼠标移动时 textvaluechanged(textevent e) 文本框 多行文本框内容修改时 windowopened(windowevent e) 窗口打开后 windowclosed(windowevent e) 窗口关闭后 windowclosing(windowevent e) 窗口关闭时 windowactivated(windowevent e) 窗口激活时 windowdeactivated(windowevent e) 窗口失去焦点时 windowiconified(windowevent e) 窗口最小化时 windowdeiconified(windowevent e) 最小化窗口还原时 每个事件类都提供下面常用的方法 : (1)public int getid(), 返回事件的类型 (2)public Object getsource(), 返回事件源的引用 当多个事件源触发的事件由一个共同的监听器处理时, 我们可以通过 getsource 方法判断 当前的事件源是哪一个组件 2. 事件适配器 为了进行事件处理, 需要创建实现 Listener 接口的类, 而按 Java 的规定, 在实现该接口 的类中, 必须同时实现接口中所定义的全部方法 在具体程序设计过程中, 有可能我们只用到 接口中的一个或几个方法 为了方便,Java 为那些声明了多个方法的 Listener 接口提供了一个 对应的适配器 (Adapter) 类, 在该类中实现了对应接口的所有方法, 只是方法体为空 比如, 窗口事件适配器的定义如下 : public abstract class WindowAdapter extends Object implements WindowListener public void windowopened(windowevent e) public void windowclosing(windowevent e) public void windowclosed(windowevent e) public void windowiconified(windowevent e) public void windowdecionified(windowevent e) public void windowactivated(windowevent e) public void windowdeactivated(windowevent e)

43 第 7 章 Java 中的 GUI 编程 151 由于在接口对应适配器类中实现了接口的所有方法, 因此, 在创建新类时, 可以不实现接口, 而是只继承某个适当的适配器, 并且仅覆盖所关心的事件处理方法即可 注意, 在使用适配器时, 一定确保所覆盖的方法书写正确 表 7-8 列出了接口及对应的适配器类 你只需把接口名称中的 Listener 用 Adapter 代替即为对应适配器的名称 接口 ActionListener AdjustmentListener ItemListener TextListener 均只有一个方法, 不需要定义适配器 表 7-8 接口及对应适配器类 接口名称 适配器名称 ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowListener ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter 在学习处理事件时, 必须很好地掌握事件源 监视器 处理事件的接口这三个概念 我们通过处理文本框这个具体组件上的事件, 来掌握处理事件的基本原理 (1) 事件源 能够产生事件的对象都可以成为事件源, 如文本框 按钮 下拉式列表等 也就是说, 事件源必须是一个对象, 而且这个对象必须是 Java 认为能够发生事件的对象 (2) 监视器 ( 监听者 ) 系统需要一个对象对事件源进行监视, 以便对发生的事件作出处理 事件源通过调用相应的方法使某个对象作为自己的监视器 例如, 对于文本框, 这个方法是 : addactionlistener(actionlistener listener) 对于获取了监视器的文本框对象, 在文本框获得输入焦点之后, 如果用户按回车键,Java 运行系统就自动用 ActionEvent 类创建了一个事件响应对象, 即发生了 ActionEvent 事件 (3) 处理事件的接口 注意到发生 ActionEvent 事件的事件源对象获得监视器方法是 : addactionlistener(actionlistener listener); 该方法中的参数是 ActionListener 类型的接口, 因此必须将一个实现 ActionListener 接口的类创建的对象传递给该方法的参数, 使得该对象成为事件源的监视器 监视器负责调用特定的方法处理事件, 也就是说创建监视器的类必须提供处理事件的特定方法, 即实现接口方法 当事件源发生某事件时, 监视器立刻监视到, 并使用系统自动调用被实现的某个接口方法, 接口方法规定了怎样处理事件的操作 接口回调这一过程对程序是不可见的, 是由系统自动完成的 程序只需让事件源获得正确的监视器, 即把实现了接口的对象传递给方法 addactionlistener(actionlistener listener) 即可 (4)ActionEvent 类中的方法 ActionEvent 事件对象调用方法 public Object getsource() 可以返回发生 ActionEvent 事件的对象

44 152 Java 语言程序设计 例 7-20 编写一个程序, 功能是 :titletext 和 passwordtext 将窗口作为监视器, 当在 titletext 中输入字符串回车后, 监视器负责将窗体的标题更改为当前 titletext 中的文本 ; 当在 passwordtext 中输入密码回车后, 监视器负责将密码显示在 titletext 中 运行效果如图 7.17 所示 import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyWindow extends JFrame implements ActionListener JTextField titletext; JPasswordField passwordtext; MyWindow(String s) super(s); titletext=new JTextField(10); passwordtext=new JPasswordField (10); passwordtext.setechochar('*'); titletext.addactionlistener(this); passwordtext.addactionlistener(this); Container con=getcontentpane(); con.setlayout(new FlowLayout()); con.add(titletext); con.add(passwordtext); setbounds(100,100,150,150); setvisible(true); validate(); setdefaultcloseoperation(jframe.exit_on_close); public void actionperformed(actionevent e) if(e.getsource()==titletext) this.settitle(titletext.gettext()); else if(e.getsource()==passwordtext) char c[]=passwordtext.getpassword(); titletext.settext(new String(c)); class k public static void main(string args[ ])

45 第 7 章 Java 中的 GUI 编程 153 MyWindow win=new MyWindow(" 窗口 "); 图 7.17 ActionEvent 事件处理 事件源 监视器 处理事件的接口三者之间的关系 : 事件源发生事件后, 会执行的操作 : (1) 被监视器监视到 ; (2) 自动产生一个 ActionEvent 对象 ; (3) 在 titletext 中输入文本回车之后,java.awt.envent 中的 ActionEvent 类创建的这一个事件对象, 并将它传递给方法 public void actionperformed(actionevent e) 中的参数 e, 监视器就会知道所发生的事件, 并执行接口中的方法 public void actionperformed(actionevent e) 对所发生的事件做出处理 Java 语言类的层次非常分明, 因而只支持单继承 为了实现多重继承的能力,Java 用接口来实现, 一个类可以实现多个接口, 这种机制比多重继承具有更简单 更灵活 更强的功能 在 AWT 中就经常用到声明和实现多个接口 记住无论实现了几个接口, 接口中已定义的方法必须一一实现, 如果对某事件不感兴趣, 可以不具体实现其方法, 而用空的方法体来代替 但却必须将所有方法都写上 7.5 创建复杂用户界面 我们已经知道轻组件都是容器, 但仍有一些经常用来添加组件的轻容器, 相对于底层重量容器而言, 习惯上称这些轻容器为中间容器 面板也是一个容器, 可放一组相关的组件 不同的面板可采用不同的布局方式, 这样有利于窗口的总体布局 Java Swing 提供了许多功能各异的中间容器, 这里只简单介绍 JPanel 面板 JScrollPane 滚动窗格 JSplitPane 拆分窗格和 JLayeredPane 分层窗格 面板容器 (JPanel 面板 ) 使用 JPanel 创建一个面板, 再向这个面板添加组件, 然后把这个面板添加到底层容器或其他中间容器中 JPanel 面板的默认布局是 FlowLayout 布局 可以使用 JPanel 类构造方法 JPanel() 构造一个面板容器对象 JPanel 面板的构造方法 : public JPanel(): 创建一个 FlowLayout 布局的面板 public JPanel(LayoutManger layout): 创建一个指定布局的面板

46 154 Java 语言程序设计 例如 : JPanel p1=new JPanel(new BorderLayout()); 说明 : 面板的默认布局是 FlowLayout, 不同于 Container 的默认 滚动窗格容器 (JScrollPane 滚动窗格 ) 我们可以把一个组件放到一个滚动窗格中, 然后通过滚动条来观察这个组件 例如, JTextArea 不自带滚动条, 因此就需要把文本区放到一个滚动窗格中 可以使用 JScrollPane 的 构造方法 JScrollPane(component c) 构造一个滚动窗格 它是一个能够自己产生滚动条的容器, 通常只包容一个组件, 并且根据这个组件的大小 自动产生滚动条 比如上面讲 JTextArea 的时候提到 :JTextArea 会随用户输入的内容自动 扩展大小, 很容易打破各组件的布局 但是, 如果我们将它包容在一个滚动窗格中, 它的扩 展就不会直接反映在大小的变化上, 而会反映在滚动窗格的滚动条上, 也就不会打破各组件 的布局 拆分窗格容器 (JSplitPane 拆分窗格 ) 拆分窗格就是被分成两部分的容器 拆分窗格有两种类型 : 水平拆分和垂直拆分 水平 拆分窗口用一条拆分线把容器分成左右两部分, 左面放一个组件, 右面放一个组件, 拆分线可 以水平移动 垂直拆分窗格由一条拆分线分成上下两部分, 上面放一个组件, 下面放一个组件, 拆分线可以垂直移动 可以使用 JSplitPane 的构造方法 JSplitPane(int a, Component b,component c) 构造一拆分窗格, 参数 a 取 JSplitPane 的静态常量 HORIZONTAL_SPLIT 或 VERTICAL_SPLIT, 以决定是水平还是垂直拆分 后两个参数决定要放置的组件 拆分窗格 调用 setdividerlocation(double position) 设置拆分线的位置 分层窗格容器 (JLayeredPane 分层窗格 ) 如果添加到容器中的组件经常需要处理重叠问题, 就可以考虑将组件添加到 JLayeredPane 容器 JLayeredPane 容器将容器分成 5 个层, 容器使用 add(jcomponent com, int layer); 添加组 件 com, 并指定 com 所在的层, 其中参数 layer 取值 JLayeredPane 类中的类常量 : DEFAULT_LAYER(5 层 ) PALETTE_LAYER(4 层 ) MODAL_LAYER(3 层 ) POPUP_LAYER(2 层 ) DRAG_LAYER(1 层, 最高层 ) 高层中的组件可以将低层中的组件遮挡住 DRAG_LAYER 层是最上面的层, 如果 JLayeredPane 中添加了许多组件, 且其中有些 组件可用鼠标移动时, 可将这些组件放到 DRAG_LAYER 层, 这样, 组件在移动过程中, 就不会被其他组件遮挡 添加到同一层上的组件, 如果发生重叠, 先添加的会遮挡后添加 的组件 JLayeredPane 对象调用 public void setlayer(component c,int layer) 可以重新设置组件 c 所在 的层, 调用 public int getlayer(component c) 可以获取组件 c 所在的层数 例 7-21 编写一个程序, 功能是在 JLayerdPane 容器中添加了 5 个组件, 分别位于不同 的层上 运行效果如图 7.18 所示 import javax.swing.*; import java.awt.*;

47 class k public static void main(string args[]) JFrame win=new JFrame(" 窗体 "); win.setbounds(100,100,300,300); win.setvisible(true); 第 7 章 Java 中的 GUI 编程 155 JButton b1=new JButton(" 我在 DEFAULT_LAYER"), b2=new JButton(" 我在 PALETTE_LAYER"), b3 =new JButton(" 我在 MODAL_LAYER"), b4 =new JButton(" 我在 POPUP_LAYER"), b5=new JButton(" 我在 DRAG_LAYER"); Container contenetpane=win.getcontentpane(); JLayeredPane pane=new JLayeredPane(); pane.setlayout(null); pane.add(b5,jlayeredpane.drag_layer); pane.add(b4,jlayeredpane.popup_layer); pane.add(b3,jlayeredpane.modal_layer); pane.add(b2,jlayeredpane.palette_layer); pane.add(b1,jlayeredpane.default_layer); b5.setbounds(50,50,200,100); b4.setbounds(40,40,200,100); b3.setbounds(30,30,200,100); b2.setbounds(20,20,200,100); b1.setbounds(10,10,200,100); b1.setbackground(color.red); b2.setbackground(color.pink); b3.setbackground(color.green); b4.setbackground(color.orange); b5.setbackground(color.yellow); contenetpane.add(pane,borderlayout.center); contenetpane.validate(); win.setdefaultcloseoperation(jframe.exit_on_close); 图 7.18 使用 JLayeredPane 容器的窗口

48 156 Java 语言程序设计 本章首先介绍 GUI 程序设计的基础知识, 其中包括常用的 Swing 组件, 如框架 按钮 标签 文本框 下拉列表 菜单等, 以及常用的布局设计方法 ; 然后介绍了 GUI 程序设计的一些高级内容, 包括事件处理机制 复杂的用户界面设计 本章是 GUI 应用程序设计的基础 通过这部分的学习, 希望读者能够熟练运用 Swing 和 AWT 进行图形用户界面的开发, 从而达到学以致用的目的 1. 设计一个程序如图 7.19 所示 在窗口中实现一个 文件 菜单和一个 系统 菜单的 功能, 文件 菜单有 打开 保存 关闭 等内容, 系统 菜单有 关于 退出 等 内容, 当单击某个菜单时, 在文本区域显示提示信息 2. 设计一个程序, 如图 7.20 所示 图 7.19 菜单测试 图 7.20 设计窗口样例

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

chp8.ppt

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

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

PowerPoint 演示文稿

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

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

Java事件处理模型

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

More information

<4D F736F F F696E74202D C DB5DA3136D5C25FCAC2BCFEC7FDB6AFB3CCD0F2C9E8BCC62E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3136D5C25FCAC2BCFEC7FDB6AFB3CCD0F2C9E8BCC62E BBCE6C8DDC4A3CABD5D> 第 16 章事件驱动程序设计 1 动因 假如希望编写一个 GUI 程序, 提示用户输入贷款总额 年利率和年数, 然后点击 Compute Loan 按钮获取月偿还 额和总偿还额 如何完成这个任务呢? 必须使用事件驱 动程序设计来编写代码以响应点击按钮事件 LoanCalculator Run 2 动因 假设希望编写程序用动画实现一面旗上升, 如图 16.1(b-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

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

<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

Microsoft Word - 正文.doc

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

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

Microsoft Word - 投影片ch18

Microsoft Word - 投影片ch18 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十八章事件處理 本章學習目標認識 Java 的委派事件模式認識並學習使用各種事件處理類別學習各種物件的事件處理 事件處理 18-2 18.1 委派事件模式 Java 的事件處理是採取 委派事件模式 (delegation event model) 委派事件模式是指當事件發生時, 產生事件的物件會把此一 訊息 轉給

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

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

chp11.ppt

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

More information

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

授课内容 内容 图形界面与控制台应用的区别 (Console Application) 第 6 章图形用户界面图形用户界面 (Graphical User Interface,GUI), 使用图形方式借助菜单 按钮等标准界面元素和键盘 鼠标操作, 实现人机交互 内容和要求 : 掌握 Java Swi 金陵科技学院教案 第 9 10 11 次课授课学时 6 教案完成时间 : 2014.2 章 节 第六章图形用户界面 6-1 AWT 组件及其属性类 6-2 事件处理 6-3 Swing 组件及事件 6-4 图形图像 ( 以自学为主 ) 1. AWT 组件及其属性类 主要内容 2. 事件处理 3. Swing 组件及事件 4. 图形图像 目的与要求 1. 掌握 Java Swing 组件的使用方法,

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

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

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

第1章

第1章 第 18 章 Swing 1 本章提要 18.1 前言 18.2 Swing 介紹 18.3 視窗元件 18.3.1 JFrame 18.3.2 Content Pane 18.3.3 Menu Bar 18.4 Swing 元件 18.4.1 JCheckBox JRadioButton JComboBox 18.4.2 JTextField JPasswordField 18.4.3 JTable

More information

Microsoft Word - Java全文.doc

Microsoft Word - Java全文.doc 第 4 章事件模型与事件处理 本章导读 本章首先介绍事件处理的由来, 并描述基于窗口的事件驱动程序的流程, 接着详细阐述 AWT 事件处理模型, 主要涉及三类对象 : 事件源 监听器和事件处理方法, 并说明事件处理机制, 具体介绍事件类 事件监听器 AWT 事件及其相应的监听器接口 事件适配器和常用的四种对事件的响应, 最后介绍开发一个基于 Java 平台事件驱动模型的记事本的案例 本章要点 事件处理的流程和机制

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

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

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

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

软件工程文档编制

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

More information

幻灯片 1

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

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

Microsoft Word - Broker.doc

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

More information

chp9.ppt

chp9.ppt Java 软件设计基础 高级 GUI 设计与多媒体技术 1. 布局设计 布局概述 java.awt FlowLayout BorderLayout CardLayout GridLayout GridBagLayout java.swing BoxLayout ScrollPanelLayout ViewportLayout OverLayout FlowLayout 布局策略 将容器的组件按照加入的先后顺序从左至右依次排列,

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

<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

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

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

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

<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

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

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

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

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

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

Microsoft Word - 投影片ch23

Microsoft Word - 投影片ch23 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第二十三章認識 Swing 本章學習目標 Swing 概述認識 JFrame 類別學習 Swing 的基本物件學習 Swing 物件之間的互動 認識 Swing 23-2 23.1 Swing 概述 Swing 提供了豐富的物件 更美觀的圖形介面, 以及更高的執行效率 幾乎每一個 AWT 物件都有一個相對應的 Swing

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

Microsoft PowerPoint - course8.ppt

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

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

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

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

More information

Microsoft PowerPoint - 18_Event.pptx

Microsoft PowerPoint - 18_Event.pptx 第十八章事件處理 認識 Java 的委派事件模式認識並學習使用各種事件處理學習各種物件的事件處理 1 18.1 委派事件模式 委派事件 指當事件發生時, 產生事件的物件會把 訊息 轉給 事件傾聽者 (event listener) 處理 下圖說明 委派事件模式 的運作流程 : 2 簡單的範例 18.1 委派事件模式 視窗內加入按鈕, 尚未加入事件的處理之程式 : 視窗內有一按鈕, 當此按鈕按下時,

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

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

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

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

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

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

(京)新登字063号

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

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

// 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

可 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

手册 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

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

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

Microsoft Word - 投影片ch17

Microsoft Word - 投影片ch17 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十七章 AWT 視窗物件 本章學習目標認識 AWT 類別認識並學習如何建立視窗物件學習如何管理與配置版面學習 Panel 類別的使用 AWT 視窗物件 17-2 17.1 認識 AWT 類別 AWT(Abstract Windowing Toolkit) 是用來處理視窗最基本的方式 17.1.1 簡單的範例 下面是一個簡單的視窗程式設計的範例

More information

Microsoft Word - 01.DOC

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

More information

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

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

More information

基于JAVA的连连看游戏设计

基于JAVA的连连看游戏设计 基 于 JAVA 的 连 连 看 游 戏 设 计 摘 要 :1978 年 第 一 款 PC 游 戏 冒 险 岛 在 美 国 问 世 至 今, 随 着 硬 件 和 软 件 水 平 的 不 断 进 步, 出 现 许 许 多 多 的 游 戏, 其 中 连 连 看 就 非 常 经 典 连 连 看 -- 在 一 个 画 好 的 格 局 内, 排 列 着 一 些 不 同 的 图 片, 选 中 两 张 一 样 的

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

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

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

Topic

Topic 二 级 JAVA 上 机 试 题 汇 编 第 01 套 : 1. 基 本 操 作 (1 小 题, 计 30 分 ) 在 考 生 文 件 夹 中 存 有 文 件 名 为 Java_1.java 的 文 件, 该 程 序 是 不 完 整 的, 请 在 注 释 行 //**********Found********** 下 一 行 语 句 的 下 划 线 地 方 填 入 正 确 内 容, 然 后 删 除

More information

untitled

untitled 1 LinkButton LinkButton 連 Button Text Visible Click HyperLink HyperLink 來 立 連 Text ImageUrl ( ) NavigateUrl 連 Target 連 _blank _parent frameset _search _self 連 _top 例 sample2-a1 易 連 private void Page_Load(object

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

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

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

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

目录 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

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

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

untitled

untitled 51testing www.51testing.com UML Java Unified Modeling Language UML 1 UML 2 UML UML UML UML UML UML use case Java 1 2 3 4( 5 6 7 UNIX Windows OS/2 ( GUI ) 8 51testing www.51testing.com use caseactor ()

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

Microsoft Word - 第13章.doc

Microsoft Word - 第13章.doc 241 Java 从入门到精通 第 13 章 Swing 用户界面设计 AWT 存在缺少剪贴板 打印支持等缺陷, 甚至没有弹出式菜单和滚动窗口等, 因此 Swing 的产生也就成为必然 Swing 是纯 Java 实现的轻量级 (light-weight) 组件, 它不依赖系统的支持 本章主要讨论 Swing 组件基本的使用方法和使用 Swing 组件创建用户界面的初步方法 13.1 Swing 基础

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

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

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

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

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

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 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

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

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

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

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

ASP.NET实现下拉框二级联动组件

ASP.NET实现下拉框二级联动组件 ASP.NET 实现下拉框二级联动组件 namespace WebApplicationDlh using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Db; / / Area 的摘要说明 /

More information

模板

模板 制作人 : 张刚 目录 类和对象 面向对象程序设计基本特征 类的声明 构造方法 成员变量和方法 封装 继承 多态 包 访问控制 final static 抽象类和接口 内部类 沈阳工业大学软件学院 Java 课程教研组 Page 2 核心知识点 类 对象 三个基本特征 类的基本结构 成员变量 构造方法 成员方法 类实例 对象创建和操作 沈阳工业大学软件学院 Java 课程教研组 Page 3 1.

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

Hive:用Java代码通过JDBC连接Hiveserver

Hive:用Java代码通过JDBC连接Hiveserver Hive: 用 Java 代码通过 JDBC 连接 Hiveserver 我们可以通过 CLI Client Web UI 等 Hive 提供的用户接口来和 Hive 通信, 但这三种方式最常用的是 CLI;Client 是 Hive 的客户端, 用户连接至 Hive Server 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点, 并且在该节点启动 Hive Server

More information

60 新编计算机应用基础实训指导 (2) 单元格显示格式设置 选中 (A1:I1) 单元格区域, 在 格式 工具栏中选择 加粗 按钮, 将字体设置为 加粗 显示 ; 选择 居中显示 按钮, 将字体设置为居中显示 ; 选择 底纹设置 按钮, 将单元格底纹设置为黄色, 显示结果如图 3 3 所示 图 3

60 新编计算机应用基础实训指导 (2) 单元格显示格式设置 选中 (A1:I1) 单元格区域, 在 格式 工具栏中选择 加粗 按钮, 将字体设置为 加粗 显示 ; 选择 居中显示 按钮, 将字体设置为居中显示 ; 选择 底纹设置 按钮, 将单元格底纹设置为黄色, 显示结果如图 3 3 所示 图 3 模块三电子表格软件 Excel 训练项目 1 教师人事档案管理表的录入与编辑 训练目标 掌握 Excel 2003 工作簿的建立 保存与打开方法 掌握工作表中各种不同类型数据的输入方法 掌握单元格格式的设置方法 掌握表格边框和底纹的设置方法 掌握特殊符号的输入方法 训练内容 制作 教师人事档案管理表, 最终显示效果如图 3 1 所示 图 3 1 教师人事档案管理表 样本 实训步骤 (1) 启动 Excel

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech - OfficeCoder 1 2 3 4 1,2,3,4 xingjiarong@mail.sdu.edu.cn 1 xuchongyang@mail.sdu.edu.cn 2 sun.mc@outlook.com 3 luoyuanhang@mail.sdu.edu.cn 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

Guava学习之Resources

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

More information

(Microsoft Word - \272\364\263q\245|\244A_49636107_\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc)

(Microsoft Word - \272\364\263q\245|\244A_49636107_\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc) SCJP (Oracle Certified Professional, Java SE5/6 Programmer) 學 制 / 班 級 : 四 年 制 / 網 通 四 乙 指 導 老 師 : 方 信 普 老 師 學 生 學 號 / 姓 名 : 49636107 蘇 建 瑋 繳 交 年 份 : 100 年 6 月 一 SCJP 介 紹 SCJP 是 Sun Certified Java Programmer

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

VB程序设计教程

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

More information