




已阅读5页,还剩65页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计 第4章图形用户界面设计 主讲 张思民 清华大学 第4章主要内容 1 Applet及awt类包2 文本组件及按钮类3 面板与布局管理4 事件处理5 常用图形用户界面组件 4 1awt类包及Applet 4 1 1AppletApplet是一个功能非常强大的能够嵌入到HTML页面中 并在浏览器中自动执行的Java程序 当使用浏览器对一个包含Applet的Web页面进行浏览时 浏览器将从Web服务器下载Applet程序到本地执行 1 Applet的定义 publicclassAppletextendsPanel publicApplet publicvoidstart publicvoidstop publicURLgetDocumentBase 2 JavaApplet程序的一般形式 importjava applet public类名extendsApplet publicvoidinit publicvoidstart publicvoidstop publicvoiddestroy 4个生命周期 3 JavaApplet程序的运行 4 1 2awt类包 1 基本的窗口类 Frame Dialog 2 基本的GUI组件类 Button Label TextField TextArea Checkbox 3 基本的事件接口 ActionListener WindowListener MouseListener KeyListener 4 界面布局控制类 FlowLayout BorderLayout GridLayout CardLayout 5 基本的绘图支持类 Graphics Canvas 4 2文本组件及按钮类 4 2 1文本组件类 1 TextComponent类 2 TextField类 文本框TextField是对单行文本进行编辑的组件 它用来接受用户的输入码或显示可编辑的文本 2 创建文本框TextFieldtext newTextField Stringstr 例4 1 1 TextField类的简单示例 2 importjava applet 3 importjava awt 4 publicclassExample4 1extendsApplet5 6 TextFieldtext1 text2 text3 7 publicvoidinit 8 9 text1 newTextField 输入密码 10 10 text1 setEditable false 11 text2 newTextField 10 12 text2 setEchoChar 13 text3 newTextField 我是一个文本框 20 14 add text1 将文本框添加到Applet中15 add text2 16 add text3 17 text3 setText 重新设置了文本 18 19 3 TextAear类 文本区TextArea是对多行文本进行编辑的组件 它拥有水平或垂直的滚动条 TextAreatxt1 newTextArea 行 列 4 标签Label类 1 创建标签创建标签对象时应同时说明这个标签中的字符串 Labellb newLabel 请输入姓名 2 常用方法setText Stringstr 设置标签文本内容 getText 获取标签文本内容 4 2 2按钮 Button 类 定义 1 publicclassButtonextendsComponent2 3 publicButton 4 publicButton Stringlabel 5 publicStringgetLabel 6 publicvoidsetLabel Stringlabel 7 publicvoidaddActionListener ActionListenerl 8 publicvoidremoveActionListener ActionListenerl 9 表4 2按钮Button类常用方法 例4 3 1 构造按钮 2 importjava applet 3 importjava awt 4 publicclassExample5 3extendsApplet5 6 Buttonbtn 7 publicvoidinit 8 btn newButton 确定 9 add btn 把按钮加到Applet中10 11 ActionListener接口 awt对这个接口的定义是 publicinterfaceActionListenerextendsEventListener publicabstractvoidactionPerformed ActionEvente 设计处理事件的类时 就要实现这个接口 其一般形式如下 classClassNameimplementsActionListener btn addActionListener this publicabstractvoidactionPerformed ActionEvente 通过实现ActionListener接口 使得监视器能知道事件的发生 在Java中 要求产生事件的组件向它的监视器注册 这样 事件源与监视器就建立了一个对应关系 建立对应关系的语句如下 对象名 addActionListener ClassName 其中 对象是事件源 ClassName是监视器 例如 btn addActionListener this 这条语句的意思是 按钮对象 事件源 btn向它的监视器 当前类 注册 也就是产生事件的事件源对象向监视器注册 例4 4 设计一个密码验证程序 1 按钮动作事件 2 importjava applet 3 importjava awt 4 importjava awt event 5 publicclassExample4 4extendsAppletimplementsActionListener6 Labellb newLabel 请输入密码 TextFieldtxt1 newTextField 25 Buttonbtn newButton 确定 10 TextFieldtxt2 newTextField 25 11 publicvoidinit 12 13 add lb 14 add txt1 15 txt1 setEchoChar 设置掩码16 add btn 17 add txt2 18 btn addActionListener this 19 20 publicvoidactionPerformed ActionEvente 21 22 if txt1 getText equals abc 比较字符串23 txt2 setText 密码正确 24 else25 txt2 setText 密码错误 26 27 作业 设计一个序列号程序 当输满一节字符后自动把焦点跳到下一个文本框 XXXXX XXXXX XXXXX 请输入序列号 XXXXX 序列号算法 假设根据用户名计算序列号 例如将用户输入的用户名的所有字母ASCII码乘199再加起来 如果用户名短于20位 补满20位 超过20位 只使用前20位 检验序列号的方法就是将根据用户输入的用户名计算一遍 然后对比计算出来的号码和用户输入的是否一致 4 3面板与布局管理 4 3 1面板 Panel 类 创建面板的一般步骤为 1 创建面板对象 PanelmyPanel newPanel 2 将面板添加到Applet容器中 add myPanel 3 把组件放置到面板上 myPanel add 组件 例4 5 面板Panel简单示例 1 面板Panel简单示例 2 importjava awt 3 publicclassExample4 5extendsjava applet Applet4 5 Panelpanel1 panel2 6 Buttonbutton1 button2 button3 button4 7 publicvoidinit 8 9 panel1 newPanel 10 panel2 newPanel 11 add panel1 add panel2 添加面板12 button1 newButton Button1 13 button2 newButton Button2 14 button3 newButton Button3 15 button4 newButton Button4 16 panel1 add button1 panel1 add button2 17 panel2 add button3 panel2 add button4 18 panel1 setBackground Color red 19 panel2 setBackground Color blue 20 21 4 3 2布局策略 Java在java awt包中定义了5种布局 它们分别是 FlowLayout BorderLayout CardLayout GridLayout GridBagLayout 设置布局的格式为 容器对象 setLayout 布局策略 1 浮动布局FlowLayout 浮动布局是按照组件的顺序 用add方法将组件从左至右在一行排列 一行放不下时就自动换行 这是系统的默认的布局方式 其设置的方法为 setLayout newFlowLayout 2 边界布局BorderLayout BorderLayout类把容器划分成5个区域 分别标记为 North South West East 和 Center 其设置的方法为 setLayout newBorderLayout 中 北 西 南 东 例4 6边界布局示例 1 边界布局示例 2 importjava awt 3 publicclassExample4 6extendsjava applet Applet4 5 publicvoidinit 6 setLayout newBorderLayout 7 将其他构件加入8 add East newButton 东 9 add South newButton 南 10 add West newButton 西 11 add North newButton 北 12 add Center newButton 中 13 14 3 网格布局GridLayout GridLayout类以矩形网格形式对容器中的组件进行布局 容器被分成大小相等的单元格 单元格的大小由最大的构件所决定 用add方法将组件一行一行地从左至右放置到布局的每个单元格中 其设置的方法为 setLayout newGridLayout introw intcols row是网格的行数 cols是网格的列数 4 卡片布局CardLayout 这种布局包含几个卡片 在某一时刻只有一个卡片是可见的 而且第一个卡片显示的内容可用自己的布局来管理 卡片布局设置的方法为 setLayout newCardLayout 例4 8 应用卡片布局 显示变换颜色的图案 程序的界面安排如图 4 4事件处理 1 AWT事件处理模型2 事件处理程序的编写 4 4 1事件处理机制1 事件处理模型在事件处理的过程中 主要涉及三类对象 Event 事件 用户对界面操作在Java语言上的描述 以类的形式出现 例如键盘操作对应的事件类是KeyEvent EventSource 事件源 事件发生的场所 通常就是各个组件 例如按钮Button Eventhandler 事件处理者 接收事件对象并对其进行处理的对象 授权处理机制 2 事件类 例SimpleEvent java 在Java中 每个事件都是某种事件类的对象 可以归为两大类 低级事件和高级事件 低级事件 KeyEvent 键盘事件 键按下 释放 MouseEvent 鼠标事件 鼠标单击 移动 高级事件 ActionEvent 动作事件 按钮按下 TextField中按Enter键等 方法 ObjectgetSource 发生事件的对象 3 事件监听器类 P103 每类事件都有对应的事件监听接口 如 MouseEvent MouseListener KeyEvent KeyListener等 可以定义一个实现了某个事件监听接口的类 并重写需要的方法 专门负责某种事件处理 例如 定义一个事件监听类实现对键盘按下事件的监听 publicclassKeyListenerimplementsKeyListener publicvoidkeyPressed KeyEventev 事件处理代码 publicvoidkeyReleased KeyEventev publicvoidkeyTyped KeyEventev 例 KeyTest java 1 事件处理程序的编写步骤 首先 定义一个实现了相应事件监听接口的类 如 classKeyHandlerimplementsKeyListener 其次 为组件注册监听器对象 如 btn addKeyListener newKeyHandler 事件处理程序的编写 2 使用类本身实现监听接口例如使用类本身监听KeyEvent事件 publicclassKeyTestimplementsKeyListener publicKeyTest Buttonbtn newButton Rec initbtn addKeyListener this addlistener 事件处理代码 例 KeyTest java 3 定义专门的外部类实现监听接口publicclassKeyTest publicKeyTest Buttonbtn newButton Rec initbtn addKeyListener newKeyHandler addlistener classKeyHandlerimplementsKeyListener 事件处理代码 4 用内部类实现监听接口publicclassKeyTest publicKeyTest Buttonbtn newButton Rec initbtn addKeyListener newKeyHandler addlistener classKeyHandlerimplementsKeyListener 事件处理代码 5 采用事件适配器Java为一些Listener接口提供了适配器类 如KeyListener KeyAdapter等 为用户提供了一种简单的实现监听器的手段 可以缩短程序代码 可以通过继承事件所对应的Adapter类 重写需要的方法 而无关的方法不用实现 例如 KeyTest java 6 一个组件注册多个监听者由于同一个事件源上可能发生多种事件 因此Java采取了授权处理机制 事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理 监听器时刻监听着事件源上所有发生的事件类型 一旦该事件类型与自己所负责处理的事件类型一致 就马上进行处理 例如 MultiListener java 4 4 5鼠标键盘事件 1 鼠标事件在图形界面中 鼠标的使用是最频繁的 在Java中 当用户使用鼠标进行操作时 就会产生鼠标事件MouseWvent 对MouseEvent事件的响应是实现MouseListener接口或MouseMotinListener接口 或者是继承MouseApdapter类 来实现鼠标适配器MouseApdapter提供的方法 与鼠标的事件有关可以分为两类 1 主要针对鼠标的坐标位置进行检测 使用MouseListener接口 2 主要针对鼠标的拖曳状态进行检测 使用MouseMotinListener接口 2 键盘事件 在Java中 当用户使用键盘进行操作时 就会产生KeyEvent事件 监听器要完成对事件的响应 就要实现KeyListener接口 或者是继承KeyAdapter类 实现对类中方法的定义 在KeyListener接口中有如下3个事件 1 KEY PRESSED 键盘按键被按下所产生的事件 2 KEY RELEASED 键盘按键被释放所产生的事件 3 KEY TYPED 键盘按键被点击所产生的事件 在实现接口时 对应的上面3个事件的处理方法是 keyPressed Evente keyReleased KeyEvente keyTyped keyEvente 4 5常用图形用户界面组件 4 5 1窗体 Frame 类Frame是带有标题 边框的顶层窗体 Frame包含有标题 菜单 类似于文本区的区域和按钮 其外观依赖于所使用的操作系统 1 窗体Frame类的定义 awt对Frame类的定义为 1 publicclassFrameextendsWindowimplementsMenuContainer2 3 publicFrame 4 publicFrame Stringtitle 5 publicStringgetTitle 6 publicvoidsetTitle Stringtitle 7 publicMenuBargetMenuBar 8 publicvoidsetMenuBar MenuBarmb 9 publicvoiddispose 10 其中 第3 4 行是窗体的构造方法 第5行是获取标题内容 第6行是设置标题内容 第7行的方法是获取在该窗体的菜单 第8行是设置菜单 第9行是关闭窗体的方法 Frame在缺省的情况是不可见的 要调用setVisible true 方法使其可见 Frame默认的布局方式为BorderLayout布局 2 创建窗体 创建窗体有二种方法 一种方法是创建Frame类的子类 并重写其构造方法 另一种方法是创建Frame类的一个对象 Framewin newFrame 简单窗体 3 Frame类的方法 一 选择组件复选框 Checkbox Checkbox Stringlabel 使用指定标签创建一个复选框 Checkbox Stringlabel booleanstate 使用指定标签创建一个复选框 并将它设置为指定状态 Checkbox Stringlabel CheckboxGroupgroup booleanstate 使用指定标签构造一个Checkbox 并将它设置为指定状态 使它处于指定复选框组中 4 5 2选择组件 单选按钮组 CheckboxGroup 提供了将多个复选框作为互斥的一个集合的方法 在任何时刻 这个集合中只有一个复选框的值为true CheckboxGroup 创建CheckboxGroup的一个新实例 例如 以下的三个Checkbox都被指定加入cbg单选按钮组中 CheckboxGroupcbg newCheckboxGroup Checkboxone newCheckbox one true cbg Checkboxtwo newCheckbox two false cbg Checkboxthree newCheckbox three false cbg 下拉列表 Choice 下拉列表每次只能选取其中的一项例如 Choicec newChoice c add First c add Second c add Third 滚动列表 List 有多个文本选项 可以同时选择多项 List introws booleanmultipleMode 创建一个初始化为显示指定行数的新滚动列表 同时指出是否可以同时选择多项 例如 Listlst newList 3 false lst add One lst add Two lst add Three 选择事件 ItemEvent 所有选择组件都有一个共同的事件类 引发选择事件的动作为 改变复选框对象的状态 改变下拉列表对象的状态 改变滚动列表的状态 使用ItemListener监听 该接口中只有一个方法 itemStateChanged ItemEvente ItemEvent的主要方法getItem 返回受事件影响的项 getStateChange 返回状态更改的类型 已选定或已取消选定 ItemEvent SELECTED 代表选项被选中Item DESELECTED 代表选项未选中例 ChoiceDemo java 二 菜单组件不能将菜单组件直接添加到一般的容器中不能使用布局管理器对它们进行布局AWT提供的菜单机制是这样的 一个容器包含一个菜单条 一个菜单条中包含多个菜单 一个菜单中包含多个菜单或菜单项和菜单相关的组件有四个 Men
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师双十二活动方案
- 教师春游活动方案
- 教案技艺大赛活动方案
- 教育教学培训活动方案
- 小学生礼让课件
- 2025年苏州市初中地理中考地理及答案
- 室颤教学查房课件
- 场地使用权与客户满意认证合同
- 车间承包与环保设施建设协议
- 施工现场安全责任连带保证合同
- 网络安全漏洞挖掘与报告
- 埋地消防管渗漏整改工程施工方案
- 装饰装修施工人员安全知识培训考试试卷及答案
- 2023年上海市普通高中学业水平合格性考试地理试题及答案
- 宿舍消防安全培训课件
- 2024版小学一年级下册综合实践活动模拟试卷
- 江苏2024年江苏省美术馆招聘笔试历年典型考题及考点附答案解析
- 2023-2024学年浙江省杭州市小升初考试数学试卷含解析
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 中国特色社会主义民族发展理论研究
- 《责任胜于能力》课件
评论
0/150
提交评论