JAVA图形用户界面的设计与实现.ppt

上传人:max****ui 文档编号:6359916 上传时间:2020-02-23 格式:PPT 页数:74 大小:586.50KB
返回 下载 相关 举报
JAVA图形用户界面的设计与实现.ppt_第1页
第1页 / 共74页
JAVA图形用户界面的设计与实现.ppt_第2页
第2页 / 共74页
JAVA图形用户界面的设计与实现.ppt_第3页
第3页 / 共74页
点击查看更多>>
资源描述
第7章图形用户界面的设计与实现 7 1图形用户界面 GUI 概述 界面设计的主要任务 1 创建组成界面的各成分和元素 指定它们的属性和位置关系 2 定义界面事件和各元素对不同事件的响应 实现界面与用户的交互功能 生成界面的类库 java awt abstractwindowtoolkit 抽象 操作定义在一个虚拟的窗口中进行 实现跨平台 界面的元素和成分 容器控制组件用户自定义成分 容器 1 容器 container 组织其他界面成分和元素的单元 用来存放别的组件 有三种类型的容器 Window Panel和ScrollPane 容器 2 Frame容器 Window是能独立存在的容器 Frame是它的子类 Frame是有边框容器 通常用作最外层容器 不能被其他容器包含 Frame方法 Frame Stringtitle add 在Frame中加入其他组件 pack 方法会自动确定Frame的大小 确保Frame容器中的组件都会有与布局相适应的合理大小 setVisible true 使Frame成为可见 Frame被创建后 它是不可见的 例子 见2007 ch7 src SimpleFrame java 容器 3 Panel容器 特点 1 没有边框 不能被移动 缩放或关闭 2 不能作为最外层图形界面的容器 不能单独存在只能用做容器组件加入其他容器 3 通常用于层次化界面组件管理 P260 例7 20TestPanel java例子 ch7 src MyFrame java 组件 图形用户界面的最小单元 用来完成与用户的交互 用户界面标准化的结果 例如 标签 文本框 按钮 菜单等 使用组件的步骤 1 创建组件类的对象 指定其属性 2 使用某种布局策略 3 将组件对象注册给对应的事件监听器 覆盖事件处理方法 实现与用户交互的功能 组件 用户自定义成分 如绘制几何图形 使用标志图案等 通常只能起到装饰 美化的作用 不能响应用户的动作 不具有交互功能 用户自定义成分 7 2绘制图形利用Graphics类可以绘制文字及直线 矩形 多边形 圆和椭圆等各种图形 对于Application程序 创建Canvas对象 并将它加入界面容器中 Applet类和Canvas类都有一个paint 方法 系统会自动创建一个Graphics类的实例作为其参数 实现各种图形绘制 Graphics类的常用绘图方法 例7 1 DrawFigures java p185 drawLine intx1 inty1 intx2 inty2 绘制直线drawRect intx inty intwidth intheight 绘制矩形fillRect intx inty intwidth intheight 填充矩形 设置字体 Font类显示文字 Graphics类的drawString 方法 在屏幕的指定位置显示字符串 Font类 表示一种字体 包含字体类型 字型和字号 如 Fontfnt newFont TimesRoman Font BOLD 12 Font类有三种字体 Font PLAIN Font BOLD Font ITALIC 使用字体 Graphics类的setFont 方法如 g setFont fnt btn setFont fnt 例7 2 AvailableFonts JavaGraphicsEnviroment类 TheGraphicsEnvironmentclassdescribesthecollectionofGraphicsDeviceobjectsandFontobjectsavailabletoaJava tm applicationonaparticularplatform 设置颜色 Color类Color类对象 控制文字或图形的颜色 构造函数 publicColor intRed intGreen intBlue 各参数取值范围 0 255publicColor floatRed floatGreen floatBlue 参数取值范围 0 0 1 0publicColor intRGB 参数的0 7位为红色分量 8 15位为绿色分量 16 23位为蓝色分量例 ColorblueColor newColor 0 0 255 问这是什么颜色 颜色设置 Graphics类的setColor 方法使用自定义的颜色 ColorblueColor newColor 0 0 255 g setColor blueColor 使用Color类的颜色常量 g setColor Color black Color类定义了13个静态颜色常量 包括 black 0 0 0 red 255 0 0 green 0 255 0 blue 0 0 255 等 对GUI组件 可用下列方法设置或获取组件的背景色和前景色 publicvoidsetBackground Colorc publicColorgetBackground publicvoidsetForeground Colorc publicColorgetForeground 例7 3 UseColor Java问题 HTML文件中的参数是以什么形式 如何传入字节码的 显示图像一 获取图像 Applet类的getImage publicImagegetImage URLurl Stringname 该方法将指定图像文件的内容返回到Image对象 方法中的参数url是一个URL 统一资源定位器 地址 也就是图像所在网址 name是图像文件名 Java支持的图像文件格式包括bmp gif jpeg等 二 绘制图像 drawImage Imageimg intx inty ImageObserverobserver 有4个参数 图像的Image对象 显示图像的左上角x y坐标 显示图像的容器对象 如 g drawImage image 10 10 this 例7 4 DrawMyImage java 实现动画效果制作步骤 1 构造或获取动画的各帧 2 绘制各帧 动画的各帧可以用绘图的方法绘制 也可在给定关键帧的情况下 采用插值方法生成 还可以用getImage 方法获取文件中的gif或jpg格式图像 例7 5 其中的paint 方法一次显示一幅图像 并调用Thread sleep 方法使程序休眠片刻 从而前一副图像在屏幕上暂留 再显示下一幅图像 形成动画 7 3Java的标准组件与事件处理 每一个可以触发事件的组件被当作事件源 每一个事件都对应专门的监听者 监听者用来接收和处理这种事件 如果一个事件源注册了对应的监听者 那么这种事件就会被监听者接收和处理 这种模式称为 委托模型 Java的事件处理机制 委托事件模型 事件源 可能产生事件的组件 注册 btn addActionListener 监听者对象 ActionEvent事件 监听者 负责监听并处理事件的对象 实现接口 publicvoidactionPerformed ActionEvente 触发事件 调用并传递参数 注册 图7 5委托事件模型 事件与监听者接口 要注意以下问题 有哪些事件源 可能发生什么事件 将事件源注册给哪个监听者 监听接口包含什么方法 各代表对什么事件的处理 举例 见P215表格 AWT的事件处理模型 监听者对象是实现监听者接口的类的实例 事件源在事件发生时把事件对象发送给注册的监听者 监听者对象会使用事件对象中的信息来决定如何响应事件 注册监听者对象是通过调用事件源的 addXXXListener 来实现的 如下 eventSourceObject addEventListener eventListenerObject 并非每个事件类都只对应一个事件 例如 KeyEvent类对应KEY PRESSED KEY RELEASED KEY TYPED三个具体的事件 KeyEvent类的getID 可以返回不同的常量 以此来判断具体的事件类型 以JButton为例 关心的事件就是按钮被按下 想注册该事件 就需要调用JButton的addActionListener 方法 该方法带一个参数 实现ActionListener接口的对象 ActionListener接口只包含一个actionPerformed 方法 所以 将实现的代码与JButton联系起来的方法就是在类里实现ActionListener接口 而且将该类的对象用JButton的addActionListener 方法注册 这样actionPerformed 方法将在按钮被按下时被回调 事件处理 用内部类实现监听接口 见例子ButtonCounter java将容器类实现监听接口 见例子FrameCounter java定义专门的外部类实现监听接口 见例子OuterCounter java采用事件适配器 见例子AdapterCounter java 注意适配器是类 不是接口 7 4GUI标准组件概述 Component Button 组件名 Canvas TextArea TextField List Scrollbar Label TextComponent Checkbox Choice Container Dialog Frame Window Applet Panel ScrollPane 容器 FileDialog 图7 7AWT组件层次关系图 Component类的常用方法publicvoidadd PopupMenupopup 在组件上加上一个弹出菜单 publicColorgetBackground 获得组件的背景色 publicFontgetFont 获得组件使用的字体 publicColorgetForeground 获得组件的前景色 publicGraphicsgetGraphics 获得绘图用的Graphics对象 publicvoidrepaint intx inty intwidth intheight 以指点的坐标点为左上角 重画组件中指点宽 高的区域 publicvoidsetBackgound Colorc 设置组件的背景色 publicvoidsetEnable booleanb 设置组件的使能状态 publicvoidsetFont Fontf 设置组件的字体 publicvoidsetSize intwidth intheight 设置组件大小 publicvoidsetVisible booleanb 设置组件是否可见的属性 publicvoidsetForeground Colorc 设置组件的前景色 publicvoidrequestFocus 使组件获得注意的焦点 标签 按钮和动作事件1 标签 Label 标签类Label的对象用来显示文本信息 它不是事件源 不能引发事件 常用方法是getText 和setText Strings 按钮 Button Button类的常用方法是getLabel 和setLabel Strings 按钮可以引发动作事件 如ActionEvent 为此 对应的监听者必须实现ActionListener接口 并实现相应的actionPerFormed ActionEvente 方法 动作事件 ActionEvent ActionEvent类只包含一个执行动作事件ACTION PERFORMED 可触发该事件的动作包括 按钮 点击 列表中的某一选项 双击 菜单项 选择 文本框 回车 5 定时器 经过一定的时间 acertainamountoftimehaselapsed 区分不同的事件源Buttonbtn newButton 计算 btn setActionCommand 命令名 btn addActionListener this 接口的动作响应方法publicvoidactionPerformed ActionEvente if e getActionCommand 命令名 若无第2句 则用if e getActionCommand 计算 或者用if e getSource btn publicintgetModifiers 判断是否还按了Ctrl Shift等功能键 该方法返回一个整数 可与ActionEvent类的静态常量ALT MASK SHIFT MASK CTRL MASK META MASK比较 用来判断动作事件发生时 是否同时按下某个功能键 目的 将一个动作事件再细分成几个事件 文本框 文本区域与文本事件 文本域 TextField 与文本区 TextArea TextField是单行文本框 TextArea是多行文本区域 它们都是TextComponent的子类 创建TextAreatxtArea newTextArea 10 45 10行25列的文本区TextFieldname newTextField 卡号 8 初始字符串为 卡号 可容纳8个字符 常用方法父类TextComponent的方法getText 获取文本信息setText Stringtext 设置文本内容setEditable bolleanb 指定文本是否可编辑isEditable 判断文本是否可编辑select intstart intend 选择指定范围内的文本selectAll 选定全部文本setSelectionStart intstart 和setSelectionEnd intend 设置选定文本的起 止位置getSelectionStart 和getSelectionEnd 获得选定文本的起 止位置getSelectText 获取选定文本的内容 TextField类的特殊方法 setEchoChar charc 设置回显字符 用在不希望如实回显的场合 如输入密码时 getEchoChar 获取屏蔽当前文本域的回显字符 EchoCharIsSet 判断是否设置了屏蔽当前文本域的回显字符 TextArea类的特殊方法 append Strings 在已有文本后面添加字符串sinsert Strings intindex 将字符串s插入到指定序号处 3 事件响应TextEvent事件 该类包含代表文本变化 如删除或键入字符 的事件TEXT VALUE CHANGED 由TextField和TextArea的父类TextComponent产生 要响应这个事件 程序应实现TextListener接口 并实现响应该事件的方法 publicvoidtextValueChanged TextEvente 调用e getSource可以获得引发该事件的文本域对象引用 ActionEvent事件 当用户在文本域按回车键时 可由TextField对象产生这一事件 单 复选按钮 列表与选择事件 选择事件 ItemEvent ItemEvent类包含的是代表选择项的选中状态发生变化的事件ITEM STATE CHANGED 引发这类事件的动作包括 1 改变列表类List对象选项的选择状态 2 改变下拉列表类Choice对象选项的选择状态 3 改变复选按钮类Checkbox对象的选择状态 4 改变检测盒菜单项CheckboxMenuItem对象的选择状态 ItemEvent类的主要方法 publicItemSelectablegetItemSelectable 返回引发选中状态变化事件的事件源 如选项或状态变化的List Choice或Checkbox对象 publicObjectgetItem 返回引发选择状态变化的具体选择项 指 文本 如选中的具体的item publicintgetStateChange 返回选择状态的具体类型 其值包括ItemEvent SELECTED 被选中 和ItemEvent DESELECTED 不选 复选按钮 Checkbox检测盒 1 创建 可同时指明其文本说明标签 Checkboxbcakg newCheckbox 背景色 2 常用方法getState 返回复选按钮的状态 选中 true 或未选中 false setState booleanb 设置复选按钮的状态 3 事件响应将检测盒注册给ItemEvent事件监听者ItemListener事件源 addItemListener 监听者 实现接口方法 以响应检测盒状态变化publicvoiditemStateChanged ItemEvente 在方法体中 用e getItemSelectable 方法获取事件源对象引用 再调用e getState 方法获取选择状态 例7 8 TestCheckbox java 单选按钮组 CheckboxGroup 单选按钮组是一组Checkbox的集合 每个Checkbox对应一种情况 用CheckboxGroup类的对象表示 例如 下述语句创建一个CheckboxGroup 三个Checkbox对象 并设置从属关系 CheckboxGroupcheckboxGroup1 newCheckboxGroup Checkboxcheckbox1 newCheckbox checkbox1 setCheckboxGroup checkboxGroup1 Checkboxcheckbox2 newCheckbox checkbox2 setCheckboxGroup checkboxGroup1 Checkboxcheckbox3 newCheckbox checkbox3 setCheckboxGroup checkboxGroup1 事件响应CheckboxGroup类是Object类的直接子类 不能响应事件 但可由组中的每个Checkbox对象响应itemStateChanged类的事件 下拉列表 Choice 1 创建包括创建Choice对象和添加选项两步 size newChoice 创建下拉列表size add 10 添加选项size add 16 size add 20 2 常用方法getSelectedIndex 返回被选项的序号getSelectedItem 返回被选项的标签文本字符select intindex select Stringitem 选中指定序号或文本内容的选项add Stringitem 和insert Stringitem intindex 将新选项item加在下拉列表的最后或指定的序号处 remove intindex 和remove Stringitem 删除指定序号或指定标签文本的选项 removeAll 删除所有选项 列表 List 1 创建列表可以实现 多选多 复选 构造函数包括 publicList publicList introws publicList introws booleanmultipleMode 其中 rows为可同时显示的选项 Item 个数 multipleMode指明是否允许复选 缺省时不允许复选 创建列表时 也要同时添加选项 ListMyList newList 5 true MyList add 北京 MyList add 上海 2 常用方法getSelectedItem 返回被选项目的文本 getSelectedItems 返回包含所有被选项目的字符串数组 getSelectedIndex 返回被选项目的序号 getSelectedIndexs 返回由所有被选项目的序号组成的整型数组 select intindex 和deselect intindex 选中或不选指定序号的选项 add Stringitem 将标签为item的项目加至列表的最后 add Stringitem intindex 将标签为item的项目加至指定序号处 remove intindex 删除指定序号处的选项 3 事件响应产生的事件 itemStateChanged 单击某一选项 actionPerformed 双击某一选项 要响应这两种事件 必须将列表注册给相应的事件监听者 list1 addItemListener newApplet1 list1 itemAdapter this list1 addActionListener newApplet1 list1 actionAdapter this 并实现相应的接口及方法 例7 11 TestList java 7 7设计事件处理专用类 7 7 1内部类外部类可以使用自己的内部类 比如创建内部类的对象并调用其方法 内部类能访问外部类中定义的所有属性和方法 7 7 2用内部类实现事件处理例子见前面 7 7 3焦点事件FocusEvent类包含两个具体事件 FOCUS GAINED FOCUS LOST FocusListener监听者接口定义了两个方法 publicvoidfocusGained FocusEvente publicvoidfocudLosted FocusEvente 组件与焦点有关的方法 requestFocus hasFocus 滚动条与调整事件 调整事件 AdjustmentEvent AdjustmentEvent类只包含一个表示GUI组件发生连续变化的事件ADJUSTMENT VALUE CANGED 当用户操纵滚动条 Scrollbar 或其子类组件 改变滑块位置时 引发这一事件 AdjustmentEvent类的主要方法 publicAdjustablegetAdjustable 返回引发状态变化的事件源 publicintgetAdjustmentType 返回事件的状态变化类型 其值包括 TRACK 拖动滑块 UNIT DECREMENT 点击下三角按钮 引发最小单位下移 UNIT INCREMENT 点击上三角按钮 引发最小单位上移 publicintgetValue 返回状态变化后滑块对应的当前数值 滚动条 Scrollbar 1 创建ScrollbarmySlider newScrollbar Scrollbar HORIZONTAL 50 1 0 100 其中 参数1指明滚动条方向 Scrollbar HORIZONTAL为水平方向 Scrollbar VERTICAL为垂直方向 参数2为滑块的初始位置 整型量 参数3为滑块的大小 参数4 5分别为滑块代表的最小和最大数据 2 常用方法setUnitIncrement intunit 指定单位增量 即单击两端的三角按钮时的数据改变 setBlockIncrement intblk 指定块增量 即单击滚动槽时的数据改变 getValue 返回当前滑块位置代表的整数值 例7 12 TestSlider Java 画布与鼠标 键盘事件 鼠标事件 MouseEvent MouseEvent类包含7个鼠标事件 MOUSE CLICKED 鼠标点击事件MOUSE DRAGGED 鼠标拖动事件MOUSE ENTERED 鼠标进入事件MOUSE EXITED 鼠标离开事件MOUSE MOVED 鼠标移动事件MOUSE PRESSED 鼠标按钮按下事件MOUSE RELEASED 鼠标按钮松开事件MouseEvent事件的监听者MouseListener和MouseMoveListener中有7个方法 与上述事件对应 系统会根据具体事件类型 自动调用相关的方法 MouseEvent类的主要方法getX 和getY 分别返回鼠标事件的X和Y坐标 getPoint 返回包含鼠标事件坐标的Point对象 getClickCount 返回鼠标点击事件的点击次数 键盘事件 KeyEvent KeyEvent类包含3种键盘事件 KEY PRESSED 按键被按下KEY RELEASED 按键被松开KEY TYPED 按键被敲击KeyEvent类的主要方法 publicchargetKeyChar 返回与引发事件的按键对应的Unicode字符 publicStringgetKeyText 返回引发事件的按键的文本内容 如 F3 Home A 等 与KeyEvent事件对应的监听者接口是KeyListener 该接口的3个方法是 publicvoidkeyPressed KeyEvente publicvoidkeyReleased KeyEvente publicvoidkeyTyped KeyEvente 画布 Canvas 用来画图的矩形背景组件 1 创建CanvasmyCanvas newCanvas myCanvas setSize 400 300 2 常用方法publicvoidpaint Grapicsg 用户须覆盖该方法以实现图形绘制 3 产生事件可引发键盘和鼠标事件 例7 14 TestCanvas java程序中使用了事件裁剪类MouseAdapter和MouseMotionAdapter 使用事件裁剪类作为父类的目的是不用实现对应监听者接口包含的所有方法 因为事件裁剪类已经用空方法体实现了对应监听者的所有方法 见p224 publicvoidpaint Graphicsg g drawString 您在 X Y 至 endX endY 画了一条线 10 20 g drawLine X Y endX endY voidthis mousePressed MouseEvente X e getX Y e getY showStatus 您在 X Y 开始画线 voidthis mouseReleased MouseEvente endX e getX endY e getY showStatus 画线结束 repaint 7 10布局设计 组件在容器中的位置和尺寸都是由布局管理器来决定的 取消布局管理器 setLayout null 默认布局管理器 Window Frame和Dialog的默认布局管理器是BorderLayout Panel和Applet的默认布局管理器是FlowLayout 布局管理器 共5种 FlowLayout 流式边界管理器BorderLayout 边界边界管理器GridLayout 网格布局管理器CardLayout 卡片布局管理器GridBagLayout 网格包布局管理器 7 10 1FlowLayout FlowLayout 组件按加入顺序自左至右排列 一行排满 转下一行 特征 不限制组件的大小 允许它们有自己的最佳大小 当容器被缩放时 组件的位置可能会变化 但组件的大小不变 例子 MyFlow java 7 10 2BorderLayout把容器空间划分为东 西 男 北 中五个区域 加入组件时 应指明所加区域 例7 17 TestBorderLayout java 7 10 3CardLayout可在容器中加入多个组件 但各组件相互重叠 每次只能显示其中一个 使用CardLayout的一般步骤 1 创建CardLayout对象 card newCardLayout 2 用容器的setLayout 方法设置布局管理器 setLayout card 3 为组件分配一个字符串名 并加入组件 add 字符串名 组件 4 调用CardLayout的show 方法 根据字符串名显示组件 show 容器名 字符串 或按加入顺序显示组件 如first 容器名 last 容器名 next 容器名 previouse 容器名 等 例7 18 TestCardLayout java 7 10 4GridLayout将容器空间划分为m n的网格区域 并将组件加入到各网格中 步骤 1 创建GridLayout对象 指定网格的行数和列数 并用setLayout 为容器设置布局管理器 setLayout newGridLayout 行数 列数 2 调用add 方法依次将各组件加入容器 如希望某一网格为空白 可在该处加入一个空标签 add newLabel 例7 19 TestGridLayout java 有时需要结合几种布局 如计算器的界面可以用BorderLayout和GridLayout结合起来 创建面板及复杂布局 7 14SwingGUI组件 在java awt包中 有各种组件 如Frame Panel Button TextField等 AWT组件的优点是简单 稳定 兼容于任何一个JDK版本 缺点是依赖本地操作系统的GUI 缺乏平台的独立性 为实现跨平台 即在不同的操作系统中保持相同的外观 从JDK1 2开始引入Swing组件 位于javax swing包中 独立于本地平台的Swing组件称为轻量级组件 而依赖于本地平台的AWT组件称为重量级组件 JFrame 与Frame不同点 不能用add 加入组件 也不能用setLayout 设置布局 每个JFrame都有一个与之关联的contentPane 只能针对这个contentPane设置布局 以及加入组件 例 JFramejf newJFrame Hello Containercp jf getContentPane cp setLayout newGridLayout 2 1 cp add jLabel cp add jButton 例 2007 ch8 SimpleSwingDemo java 8 3 1JAppletJApplet类是Applet类的子类 特点 1 缺省布局策略为BorderLayout 2 必须先使用getContentPane 方法获得一个Container对象 再调用该对象的add 方法将各 J组件 加入 用法同JFrame 例8 5 TestJApplet java 8 3 2JButton创建图标按钮Jbutton对象除了拥有文本标签外 还可以拥有图标 图标可以是用户绘制的图形 也可以是gif图像 图标按钮的创建方式如下 Iconicon newImageIcon bIcon gif 创建图标jbtn newJbutton J按钮 icon 创建图标按钮 例8 6 TestIconButton java改变按钮图标Jbutton按钮可以拥有多个图标 利用Jbutton类的setPressedIcon Iconic 和setRolloverIcon Iconic 方法 可设定不同状态下的图标 并可根据按钮所处的状态自动变换 例8 7 TestChangedIcon java为按钮加入提示利用Jbutton类的setToolTipText Stringtext 方法可为按钮加入提示 例8 8 TestTipButton java 8 3 3JSliderJSlider也是辅助用户输入连续变化数值的GUI组件 并具有刻度和标注功能 例8 9 TestJSlider java8 3 4 JPasswordFieldJPassWordField类是JTextField类的子类 主要用来输入口令 例8 10 TestJPasswordField java8 3 5JTabbedPane这是一个容器 其作用类似于CardLayout布局 例8 11 UseTabbedPane java
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!