《 j2me 程序开发设计(上) 》 专业教程 理论讲解部分 ver 3.1

23
1 J2ME 程程程程程程 程程 ()程程程程 程程程程程程 Ver 3.1 Ver 3.1

Upload: edythe

Post on 13-Jan-2016

150 views

Category:

Documents


0 download

DESCRIPTION

《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1. 课程概述. Canvas 类概述 绘制和重绘屏幕 低级事件. 重点. 绘制和重绘屏幕 低级事件. 掌握 J2ME 低级用户界面. 难点. 绘制和重绘屏幕 低级事件. 学习目标. 6.1 Canvas 类. 6.1.1 Canvas 类概述. 低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面 API ,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。. 6.1 Canvas 类. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

11

《 J2ME 程序开发设计(上)》专业教程

理论讲解部分

Ver 3.1Ver 3.1

Page 2: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

22

第第 55 章 低级用户界面章 低级用户界面

课程概述

Canvas类概述 绘制和重绘屏幕

低级事件

重点

绘制和重绘屏幕 低级事件

难点

绘制和重绘屏幕 低级事件

学习目标

掌握 J2ME 低级用户界面

Page 3: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

33

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.1 Canvas 类概述

低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面 A

PI ,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。

Page 4: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

44

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.1 Canvas 类概述

Canvas 是 Displayable 的直接子类,属于 J2ME 中的低级API 。用户利用这些低级 API 可对设备精确控制,如绘制像素、接收原始的用户输入事件等。

Canvas 与高级 API 相比控制更加灵活,但同时是以其复杂性、高成本为代价的,并牺牲了一定的可移植性。它的基本用法与其他 Displayable 对象一致。

Page 5: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

55

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.1 Canvas 类概述

Canvas 类是 Displayable 类的子类,它提供了绘制方法以及应用程序的一些低级事件处理方法。

由于 Canvas 类的 paint 方法被声明为抽象方法,所以 Canvas 类也是一个抽象类。在建立 Canvas 子类的时候,要求程序提供 paint 方法的实现。

而低级事件处理方法未声明为抽象方法,其默认实现为空。

Page 6: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

66

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.1 Canvas 类概述

显示屏幕上能够实际用于绘制的区域因设备的不同而有所差异。因此为了保证应用程序具有较好移植性,一般不直接设定好屏幕的尺寸,而是通过调用 getHeight() 和 getWidth() 方法来获得具体尺寸。

获取屏幕宽度:

int width = getWidth();

获取屏幕高度:

int height= getHeight();

Page 7: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

77

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.1 Canvas 类概述

Canvas 的坐标原点位于左上角,其最下角的坐标为 (getWidth() , getHeight()) 。

屏幕的上部分为设备保留部分,用来向用户指示电量、信号强度、设备状态等。

下面部分用于 MIDP 设置菜单等,既可以是应用程序设置的 Command软键,也可以是 MIDP 实现自动设置的菜单等软键,其位置由系统决定。

Page 8: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

88

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.2 绘制和重绘屏幕

paint(Graphics g) 方法用来绘制屏幕。这个方法是一个抽象方法,应用程序必须实现这个方法才能够绘制图形。如果在 Canvas 的子类中没有实现这个方法,将会报告编译错误。

paint 方法被传入一个 Graphics 对象 g , g 所设置的矩形区域定义了屏幕上可绘制的区域,也就是需要重绘的区域。而应用程序不需要去了解 paint 调用的底层实现。

public void paint(Graphics g)

{

g.setColor(200,200,255) ;

g.fillRect(0,0,getWidth(),getHeight()) ;

}

Page 9: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

99

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.2 绘制和重绘屏幕

在绘制屏幕时,程序中不直接调用 paint() 方法。当把 Canvas 的子类对象作为参数设置在 setCurrent() 方法中时,程序会去自动调用 paint() 方法。

MyCanvas mc = new MyCanvas() ;

display.setCurrent(mc) ;

Page 10: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1010

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.2 绘制和重绘屏幕

重绘时,在应用程序中同样不应该直接调用 paint() 方法来实现,而应该使用 repaint() 方法。调用 repaint() 方法会使系统调用 paint()方法。

repaint();

Page 11: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1111

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

应用程序接受按键事件,对于要向 MIDP 应用程序报告事件的每个按键都被分配一个按键代码,每个物理键所对应的按键代码的值惟一的。

MIDP 定义了按键代码,这些按键代码符合 ITU-T 标准电话键盘所定义的按键。在键盘上可能会出现其他按键,为了保证可移植性,应用程序应该只使用标准的按键代码。

Page 12: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1212

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件 Canvas 类关于按键定义的常量:

按键代码 ITU 类型 值 按键名称 ( 字符串 )

KEY NUMO 0 static final int 48 0

KEY NUMI 1 static final int 49 1

KEY NUM2 2 static final int 50 2

KEY NLJM3 3 static final int 51 3

KEY NUM4 4 static final int 52 4

KEY NUM5 5 static final int 53 5

KEY NIJM6 6 static final int 54 6

KEY NUM7 7 static final int 55 7

KEY NIJM8 8 static final int 56 8

KEY NUM9 9 static final int 57 9

KEY POUND 井号键 (#) static final int 35 POUND

KEY STAR 星号键 (*) static final int 42 ASTERISK

Page 13: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1313

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

Canvas 类定义了下列几个按键事件:

protected void keyPressed(int keyCode) 当按键被按下时调用 ;

protected void keyReleased(int keyCode) 当按键被释放时调用 ;

protected void keyRepeated(int keyCode) 当按键重复时(保持按下)调用。

Page 14: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1414

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

当按键被按下时,就会触发 keyPressed 事件,系统会自动调用keyPressed(int keyCode) 方法,所按下的物理键盘对应于键码,程序在获知键码的同时,也就是知道用户按下了什么键,便能够对这个事件进行处理。

public void keyPressed(int keyCode){

System.out.println(" 按下了 " + getKeyName(keyCode)

+ " , 其值为: " + keyCode);

}

Page 15: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1515

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

当按键按下再释放后,会触发 keyReleased 事件。同 keyPressed 事件一样, Canvas 类中的这个方法的实现是空的,应用程序要监听按键释放的事件,必须重载 keyReleased() 方法。

public void keyReleased(int keyCode){

System.out.println(" 释放了 " + getKeyName(keyCode)

+ " , 其值为: " + keyCode);

}

Page 16: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1616

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

当用户在很短的时间里连续按了两次同样的键,就会触发一个重复按键事件 keyRepeated 。有些设备支持重复按键事件,有些不支持。应用程序可以使用

public boolean hasRepeatEvents()

检查设备是否支持重复按键事件:

Page 17: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1717

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

在手机游戏开发中,经常使用游戏动作来代替键码。Canvas 中定义了游戏动作常量 :

游戏动作 类型 值UP static final int 1

LEFT static final int 2

RIGHT static final int 5

DOWN static final int 6

FIRE static final int 8

GAME_A static final int 9

GAME_B static final int l0

GAME_C static final int 11

GAME_D static final int 12

Page 18: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1818

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件

虽然每一个键码都被映射给一个游戏动作,但是一个游戏动作也可以和多个键码相关联。两者之间的转化是通过 getKeyCode() 和 getGameAction() 方法完成的。

游戏动作是如何与键码进行映射要根据具体设备来决定。例如,在某些设备上,游戏动作 UP 、 DOWN 、 LEFT 和 RIGHT 可能被映射到 4 个导航键上,而在其他设备上,它们可能被映射到某些数字键上。应用程序可以使用 getGameAction() 方法来将键码转换为游戏动作,从而增强了程序的可移植性。

Page 19: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

1919

第第 55 章 低级用户界面章 低级用户界面

6.1 Canvas 类

6.1.3 低级事件 对于触摸屏而言,指针可以是接触屏幕的任何物体,通常是一支

输入笔。有 3种类型的指针事件:指针接触事件、指针释放事件以及指针拖动事件。相应地,也有 3种类型的 指针处理方法。如下:

( 1) protected void pointerDragged(int x , int y) ,当指针拖动时调用;

( 2) protected void pointerPressed(int x , int y) ,当指针按下时调用;

( 3) protected void pointerReleased(int x , int y) ,当指针释放时调用。

参数 x 和 y 分别是和 Canvas 相对应的指针的位置。应用程序如果要使用指针事件,就必须实现以上方法。

Page 20: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

2020

第第 55 章 低级用户界面章 低级用户界面

本课小结

理解 Canvas 类结构

掌握绘制和重绘屏幕

掌握低级事件

Page 21: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

2121

第第 55 章 低级用户界面章 低级用户界面

小测验

判断题

1. canvas 比 screen 灵活性更高,复杂性更低()

2. canvas 可以用来开发需要精确显示的图形()

3. Graphics 可以在 canvas 中随时获取()

Page 22: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

2222

第第 55 章 低级用户界面章 低级用户界面

小测验答案

判断题

1. canvas 比 screen 灵活性更高,复杂性更低(错)

2. canvas 可以用来开发需要精确显示的图形(对)

3. Graphics 可以在 canvas 中随时获取(错)

Page 23: 《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1

2323

第第 55 章 低级用户界面章 低级用户界面

课后作业

【作业】编写程序,练习使用低级用户事件