1 / 57

专题三 低级用户界面

专题三 低级用户界面. 案例一 运动的小球. 回顾. MVC 设计模式 在 JavaME 开发中的应用 优点及缺点 学习 Form 类及 Item 子类 Item TextField ChoiceGroup Spacer ImageItem ) 掌握 Item 事件处理( ItemCommandListener/ItemStateListener ). 本章目标. 掌握 Canvas 类 屏幕绘制及重绘 事件处理 学习 Graphics 类 绘制几何图形 设置颜色 绘制文本 学习 Font 类. 工作任务 2-1.

chloe
Download Presentation

专题三 低级用户界面

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 专题三 低级用户界面 案例一 运动的小球

  2. 回顾 • MVC设计模式 • 在JavaME开发中的应用 • 优点及缺点 • 学习Form类及Item子类 • Item • TextField • ChoiceGroup • Spacer • ImageItem) • 掌握Item事件处理(ItemCommandListener/ItemStateListener)

  3. 本章目标 • 掌握Canvas类 • 屏幕绘制及重绘 • 事件处理 • 学习Graphics类 • 绘制几何图形 • 设置颜色 • 绘制文本 • 学习Font类

  4. 工作任务2-1 • 实现一个运动小球的游戏,具体要求如下: • 游戏包含一个开始菜单,包括“开始”和“退出”两个菜单项。用户选择“开始”菜单项,启动弹球游戏;选择“退出”菜单项,结束弹球游戏。 • 游戏开始后,屏幕上显示一个运动的小球,还包括一个“暂停”命令。当用户执行“暂停”命令(屏幕右下角)时,屏幕返回菜单选择界面 。

  5. 工作任务2-2 • 参考实现结果:

  6. 相关实践24-1 • 1.创建名为subject5的MIDlet Project,并在src源文件夹下创建BounceMIDlet类

  7. 相关实践24-2 • 2.创建封装小球特征的Ball类

  8. 相关实践24-3 • 3.创建继承Canvas类的菜单屏幕类MenuCanvas 屏幕绘制 Graphics类

  9. 相关实践24-4 • 为MenuCanvas添加属性: • 屏幕尺寸:canvasWidth(画布宽)、canvasHeight(画布高) • 矩形方框的坐标:recX(左上角x坐标)、recY(左上角y坐标) • 矩形方框的尺寸:menuWidth(菜单宽度)、menuHeight(菜单高度) • 每个填充菜单项的坐标:基于recX和recY计算获取 • 每个填充菜单项的尺寸:fillMenuWidth(填充菜单宽度)、fillMenuHeight(填充菜单高度) 减2是为了让显示效果有一点立体感

  10. 相关实践24-5 • 在构造方法中初始化上面的属性:

  11. 相关实践24-6 设置颜色 • 实现paint方法,在其中编写界面绘制的代码: 绘制矩形 绘制直线 设置字体 绘制文本

  12. 相关实践24-7 • 在BounceMIDlet类中创建MenuCanvas对象,然后设置为当前界面:

  13. 相关实践24-8 • 绘制选中菜单项:

  14. 相关实践24-9 • 4.实现选择菜单的操作: 按键事件处理 游戏动作

  15. 相关实践24-10 • 5.实现退出功能: • 为MenuCanvas类添加一个BounceMIDlet对象的引用,并重载构造方法

  16. 相关实践24-11 • 在BounceMIDlet类中添加一个exit方法:

  17. 相关实践24-12 • 修改MenuCanvas类,在keyPressed方法中增加一个处理“Fire”键被按下的case分支判断:

  18. 相关实践24-13 • 修改BounceMIDlet的构造方法: 调用MenuCanvas的带参构造

  19. 相关实践24-14 • 6.实现游戏主界面,创建BounceCanvas类

  20. 相关实践24-15 • 为BounceCanvas类添加下面的属性 值越大,小球的运动速度越快

  21. 相关实践24-16 • 为BounceCanvas添加构造方法,对属性进行初始化

  22. 相关实践24-17 • 实现BounceCanvas类的paint方法,在屏幕上绘制小球 绘制圆弧和扇面

  23. 相关实践24-18 • 在BounceMIDlet类中添加一个BounceCanvas界面引用,并提供一个开始游戏的play方法

  24. 相关实践24-19 • 为MenuCanvas的keyPresssed方法添加判断按下“开始”菜单项的case分支

  25. 相关实践24-20 • 绘制动态小球 • 修改BounceCanvas类,让它实现Runnable接口,成为线程运行的目标类:

  26. 相关实践24-21 • 修改BounceMIDlet类的play方法,添加启动线程的代码

  27. 相关实践24-22 • 实现“暂停”游戏的操作-1 • 在BounceCanvas中添加一个pause方法,将线程执行的标识修改为false

  28. 相关实践24-23 • 实现“暂停”游戏的操作-2 • 实现BounceMIDlet的pauseApp方法,在其中执行释放资源和切换界面的操作:

  29. 相关实践24-24 • 实现“暂停”游戏的操作-3 • 实现BounceCanvas类的commandAction方法,处理执行“暂停”命令的操作

  30. 总结-1 • 掌握Canvas类 • 屏幕绘制 • paint方法 • 重绘 • repaint方法 • 事件处理 • 键盘按键事件 • 游戏动作

  31. 总结-2 • 学习Graphics类 • 绘制几何图形 • 绘制直线 • 绘制矩形 • 绘制圆弧和扇面 • 设置颜色 • 绘制文本 • 学习Font类

  32. Canvas-1 • Canvas • “画布”类,是Displayable的子类 • 提供了一系列屏幕绘制以及处理低级界面事件的方法 • 是一个抽象类,它包含一个paint抽象方法,必须创建该类的子类

  33. Canvas-2 • Canvas类的常用方法 • 界面设置及设备信息相关 • setFullScreenMode/isDoubleBuffered/hasPointerEvents/hasPointerMotionEvents/hasRepeatEvents • 屏幕绘制相关 • paint/repaint/serviceRepaints • 事件处理相关 • hideNotify/showNotify/sizeChanged • keyPressed/keyReleased/keyRepeated/getKeyName/getKeyCode/getGameAction • pointerDragged/pointerPressed/pointerReleased

  34. Canvas-2 • 创建Canvas子类

  35. Canvas-3 • Canvas的两种显示方式 • 正常模式(默认) • setFullScreenMode(false) • 全屏模式 • setFullScreenMode(true) 在全屏模式下,Canvas的标题、Ticker将自动被隐藏,Command命令也无法使用。

  36. 屏幕绘制-1 • paint方法 • protected abstract paint(Graphics g) • 子类应实现paint方法 • 不建议在应用程序中直接调用 • repaint方法 • 调用该方法将引起paint方法的执行 • public final void repaint():重绘整个屏幕 • public final void repaint(int x,int y,int width,int height):重绘屏幕的指定区域 • repaint方法不能被子类重写

  37. 屏幕绘制-2

  38. Graphics-1 • Graphics类 • 主要提供了基本的绘制功能 • 几何图形:包括直线、(圆角)矩形、弧形、填充三角形等 • 文本:字符或字符串 • 图像:绘制可变图像或不可变图像 • 设置绘图环境 • 设置颜色 • 设置字体

  39. Graphics-2 • 获取Graphics类的对象 • 通过paint方法的参数 • Graphics对象主要用于在屏幕上绘制图形 • 利用Image类的getGraphics方法 • 一般用于绘制后台缓冲

  40. 设置颜色-1 • 颜色表示 • Graphics类中提供了一个24位的颜色模型,分别使用三个8位二进制表示红(R)、绿(G)、蓝(B)三种颜色 • public void setColor(int red,int green,int blue):每个参数的范围是0-255 • public viod setColor(int RGB):参数使用一个十六进制的整数,该整数的形式为“0xAARRGGBB” • 后24位(RRGGBB)代表红、绿、蓝三种颜色 • 前八位(AA)则代表了Alpha透明度值,该值在颜色模型中被忽略 • Graphics的默认颜色为黑色,颜色值是0

  41. 设置颜色-2 后面设置的颜色会替代之前设定的颜色

  42. 绘制矩形-1 • Graphics类的drawRect方法用来绘制矩形,fillRect方法用来绘制填充矩形: • drawRect(int x,int y,int width,int height) • fillRect(int x,int y,int width,int height) • x:矩形左上角横坐标 • y:矩形左上角纵坐标 • width:矩形宽度 • height:矩形高度

  43. 绘制矩形-2

  44. 绘制圆弧和扇面-1 • Graphics类提供了用于绘制圆弧和扇面的drawArc和fillArc方法: • public drawArc(int x,int y, int width,int height,int startAngle,int arcAngle) • public fillArc(int x,int y,int width,int height,int startAngle,int arcAngle) • x:圆弧所在矩形区左上角的横坐标 • y:圆弧所在矩形区左上角的纵坐标 • width:圆弧所在矩形区的宽 • height:圆弧所在矩形区的高 • startAngle:以圆弧所在矩形的中心为圆心,时钟3点的方向为0度角,逆时针旋转的角度 • arcAngle:以startAngle为起始角度,逆时针旋转的角度

  45. 绘制圆弧和扇面-2

  46. 绘制直线 • 可以调用Graphics类的drawLine方法在屏幕上绘制一条直线: • public void drawLine(int x1,int y1,int x2,int y2) • (x1,y1)和(x2,y2)分别代表直线两个端点的坐标值

  47. 设置字体-1 • Font类-1 • Font类封装了字体的属性信息。 • 属性主要分为三种:字型、外观和字号,属性及属性值由Font类中定义的常量表示: • 字型属性: • STYLE_PLAIN:0,表示“普通” • STYLE_BOLD:1,表示“粗体” • STYLE_ITALIC:2,表示“斜体” • STYLE_UNDERLINED:4,表示“下划线”

  48. 设置字体-2 • Font类-2 • 外观属性: • FACE_SYSTEM:0,表示“系统字体” • FACE_MONOSPACE:1,表示“等宽字体” • FACE_PROPORTIONAL:64,表示“均衡字体” • 字号属性: • SIZE_MEDIUM:0,表示“中号” • SIZE_SMALL:8,表示“小号” • SIZE_LARGE:16,表示“大号” • 字体属性之间可以利用“|”操作符组成位运算表达式 • Font.FACE_MONOSPACE | Font.STYLE_UNDERLINED | Font.SIZE_LARGE

  49. 设置字体-3 • 字体属性组合规则 • 外观属性之间不能组合,例如FACE_SYSTEM | FACE_MONOSPACE是非法的 • 字号属性之间不能组合,例如SIZE_SMALL | SIZE_LARGE是非法的 • 字型属性中SYTLE_PLAIN不能与其他字型组合使用,因为它的值是0。而其他三种字型可以随意组合使用

  50. 设置字体-4 • 创建字体的方式 • 无法通过构造方法创建Font类的对象 • 利用Font类提供的三个静态方法获取Font对象的引用 • public static Font getDefaultFont() • public static Font getFont(int face,int style,int size) • public static Font getFont(int fontSpecifier)

More Related