手机板书内容.docx
《手机板书内容.docx》由会员分享,可在线阅读,更多相关《手机板书内容.docx(27页珍藏版)》请在冰豆网上搜索。
![手机板书内容.docx](https://file1.bdocx.com/fileroot1/2023-6/15/88dd065b-cb8b-49a4-be1e-a80c9696a153/88dd065b-cb8b-49a4-be1e-a80c9696a1531.gif)
手机板书内容
手机可以编程吗?
手机硬件,基本可以按计算机对待。
作为计算机,最基本的部件是主机(处理器CPU+内存)。
从软件上看就是操作系统。
结论:
手机实际上就是一台小的计算机,其中配置一定的处理器和一定容量的内存,并工作在某种操作系统下。
常见的手机芯片(CPU):
目前英国ARM架构占据手机处理器90%的市场份额。
1.Intel的XScale处理器
2.ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
3.OMAP:
无线设备制造商,诸如诺基亚、索尼爱立信、Palm、惠普公司及索尼等业界顶尖的设备制造商,以及诸如宏碁、LuckyGoldstar、HTC、Sendo及其它的主要设计制造商均宣布支持TI的OMAP处理器平台。
常见的手机操作系统:
操作系统
1.Symbian操作系统:
Symbian
系统的手机目前比较常见的是Nokia、三星、西门子
2.Windows Mobile(windowsCE)操作系统
3.iOS系统:
iphone系列手的操作。
4Palm系统
5..Android系统.新型手机操作系统,支持无线互联网技术。
主流的手机编程体系:
Midp
Adriod
本课程以MIDP手机程序设计为框架展开。
编程工具WTK2.5,它要求jdk版本为1.5版以上。
用WTK开发一个手机程序的过程:
新建一个项目(newproject),完成后结果:
注意以下三个信息:
PlaceJavasourcefilesin"C:
\WTK25\apps\演示程序\src"
将java源程序放在C:
\WTK25\apps\演示程序\src文件夹中。
只有将源程序放在这个位置上,才能被WTK找到并编译。
Placeapplicationresourcefilesin"C:
\WTK25\apps\演示程序\res"
将项目所需的资源文件(如图片)存放在C:
\WTK25\apps\演示程序\res文件夹中,只有这个文件夹中的资源文件才能被WTK读出。
Placeapplicationlibraryfilesin"C:
\WTK25\apps\演示程序\lib"
这个文件夹中存放外来的库文件(略)
按以上要求存放文档后,就可以编译程序(Build),编译过程中可能产生错误,那么必须改正源程序中的错误,再编译,直到程序无错为止。
运行程序(Run)。
手机程序结构:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassDEMOextendsMIDlet
{
publicvoidstartApp()
{}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
}
以上是一个最简单的手机程序,它可以表明一个手机程序的基本结构:
1.手机程序由若干类(class)构成
从java程序的观点,类应如下:
class类名
{
}
2.在若干类中,必须且只能有一个主类。
它是程序中最开始执行的类。
主要类有两个标志:
public、必须扩展于MIDlet类。
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassDEMOextendsMIDlet
{
publicvoidstartApp()
{}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
}
3.java类的写法:
class类名
{
变量声明;//可有可无,可多可少
函数声明;//可有可无,可多可少
}
变量是程序运行过程中用于存放数据的空间,这些空间是以变量的形式出现,变量需要声明
类型名变量名
intx,y;声明了x,y两个整型变量,存放整数。
doublez;声明了一个浮点型变量z,存放实数。
charc;变量c中存放一个字符
Stringstr;str可以存放一个字符串。
函数,由一组语句构成的程序段。
值类型函数名(参数表)
{
函数体;
}
如:
publicvoiddestroyApp(booleanb)
{
X=7;
}
函数是对数据的加工过程,它由名称、参数表(加工的原料,也就是被计算的数据)、值类型(加工结果的类型)以及函数体(加工过程)。
考查手机程序:
publicclassDEMOextendsMIDlet
{
publicvoidstartApp(){}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
}
这个手机程序是一个类,名字是DEMO,它是扩展于MIDlet类。
类中没有声明变量,声明了startApp、pauseApp和destroyApp三个函数。
三个函数都没有函数体。
可见,作为一个手机程序必须是一个java类,而且必须扩展于MIDlet类,声明startApp、pauseApp和destroyApp三个函数。
在手机程序中,可能会用到一些其他类,如MIDlet,在程序中必须导入(import)这些类。
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
MIDlet类就在javax.microedition.midlet包(文件夹)中。
*表示所有类。
类似于C中的#include的作用。
第三讲
在手机程序中的三个函数是与手机上的一些事件相关联的,当手机程序运行过程中发生了某些事件时,系统就会自动调用这些函数。
startApp函数:
当手机程序运行时,首先初始化(构造函数,init函数),然后自动调用该函数。
所以它是一个程序的入口部分,所以一个程序的功能代码将从这个函数开始。
pauseApp函数:
当一个手机程序运行时,如果有了电话呼叫、短信息,这时系统会暂停本程序,暂停本程序之前,自动调用该函数。
因此在接听电话或阅览短信之前,程序应该做的准备工作代码可以写在该函数中。
destroyApp函数:
在程序即将结束时,调用的函数。
在这个函数中,可以设计一些程序的善后处理代码。
程序中这三个函数是必不可少的,除此之外,程序还可以设计其他的函数甚至其他类。
在手机上显示文本框:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassDEMOextendsMIDlet
{
Displaydisplay;
TextBoxtb=newTextBox(“标题”,“正文”,200,0);
publicvoidstartApp()
{
display=Display.getDisplay(this);
display.setCurrent(tb);
}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
}
可以显示在屏幕上的对象必须是Dispalyable类的子类的对象。
1.声明并创建TextBox对象。
TextBoxtb=newTextBox(“标题”,“正文”,200,0);
TextBox生时必须给出四个参数:
标题,正文,最大长度,输入限制。
2.取得显示屏幕
Displaydisp=Display.getDisplay(this);
3.将可显组件设置到屏幕。
disp.setCurrent(tb);
第四讲:
手机程序中的菜单(命令项)。
MIDP中的菜单是由Command类实现。
声明并产生命令项的方法:
Commandc;
C=newCommand(“文字”,命令型态,优先级);
或者
Commandc=newCommand(“文字”,命令型态,优先级)
以上的语法中,命令型态:
–命令类型可以是下列8个值之一
•Command.BACK:
返回前一屏幕;
•Command.CANCEL:
取消当前正在进行的工作;
•Command.STOP:
中断当前正在运行的动作。
•Command.EXIT:
退出应用程序;
•Command.HELP:
请求在线帮助;
•Command.ITEM:
选择命令是当前屏幕中的某一项;
•Command.SCREEN:
应用到当前屏幕的命令;
•Command.OK:
确定当前正在进行的动作;
不同型态的命令将出现的位置不同。
优先级部分表现为一个整数,整数越小,优先级越高。
命令项产生后,可以用addCommand()函数将命令项设置到Dispalyable(如TextBox).
命令型态决定命令选项出现的位置:
命令项出现在屏幕最下行。
点中两个软件按钮,就可以选中某个菜单。
左边永远只能出现一项菜单。
其他菜单都会出现在右边,其他菜单如果有多项,则折迭成一个menu多级菜单。
所以,使用频率最高的菜单应该设计在左边。
BACK、CANCEL、STOP和EXIT型态的菜单可以出现在左边,其他四种型态只能出现在右边。
总结,各种菜单项出现的规律:
型态决定位置,如果把型态也理解为一种优先的话,那么上述八种型态的优先级别是依次降低的。
高四级可以出现在左边。
除型态之外,型态相同的前提下优先级可以决定各菜单出现次序。
Commandc=newCommand(“文字”,命令型态,优先级)
优先级值越小,越先出现。
即:
菜单出现的次序是:
先决定于型态;型态相同时,决定于优先级;型态和优先级都相同,则决定于在程序中添加的次序。
菜单响应:
当用户选定了某菜单时,都应该产生某一个动作。
程序中总需要将某些代码的执行与某菜单相联系,这就是事件模型。
MIDP中的事件模型:
事件,是手机中某状态改变。
这些事件有些是由系统产生的,如手机程序被呼叫中断。
有些事件是人为产生的,如按下了某按键。
系统事件的响应,由系统负责,如startApp,pauseApp,destroyApp函数的调用就是如此。
但人为产生的按键事件,必须在程序中将事件与动作(函数)对应。
这种编程规律,就是事件模型。
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassMyMIDletextendsMIDlet{
Displaydisp;
TextBoxtb=newTextBox("TextBox演示程序","天气真好......",256,1);
Commandcomm1=newCommand("退出",Command.SCREEN,2),comm2=newCommand("还原",Command.SCREEN,1),
comm3=newCommand("清除",Command.EXIT,2),comm4=newCommand("选项",Command.SCREEN,2);
publicvoidstartApp()
{
tb.addCommand(comm4);
tb.addCommand(comm1);tb.addCommand(comm2);tb.addCommand(comm3);
disp=Display.getDisplay(this);
disp.setCurrent(tb);
}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
}
事件:
手机上发生的状态改变。
有些事件由系统产生,如:
手机程序的运行(初始化),中断,撤消;系统产生的事件的响应,由系统规定。
有些事件由操作者产生,如:
操作者按下键盘上的某键。
这些事件可以在程序中通过程序处理。
这样的事件分成两大类:
高级事件与低级事件。
高级事件:
由操作者按下软件按钮产生的事件。
对于高级事件的响应与硬件无关,容易移植,针对某公司某款式型号上写出的高级事件响应程序,将它移植到另一公司另一款式或另一个型号的机器上,一定能正确执行。
菜单事件就是高级事件之一。
低级事件:
指操作者按下除软件按钮之外的其他按键所产生的事件。
由于不同公司不同款式不同型号上,对这些按键的定义可能差别,所以针对某机型上设计的低级事件响应程序,在另一机型上不保证能正确运行。
可见,低级事件与硬件相关,不保证移植性。
菜单事件的响应:
菜单事件,是由一个接口去监视并处理。
CommandListener
程序中,首先必须指定事件的监视器,它负责监视事件是否发生,当事件发生后,进行处理。
监视器是一个类(的对象),任何类都以指定为监视器,但它必须实现CommandListener接口.
classAimplementsCommandListener{}
最简单的情况下,也可以指定主类(程序中MIDlet的派生类)作监视器。
publicclassAextendsMIDletimplementsCommandListener
{
……………..
}
Java语言规定,当一个类实现(implements)了接口时,在该类中必须写出接口中的所有接口函数的函数体。
在接口中只声明函数,但没有函数体。
CommandListener接口中只定义了一个抽象函数(只有声明,没有函数体):
publicvoidcommandAction(Commandc,Displayalbed);
接口的作用,将菜单项选中的动作,与commandAction函数相关联,即当选中菜单时,程序一定会转到这个函数。
所以,在实现该接口的类中,就应该给出这个函数的函数体。
publicvoidcommandAction(Commandc,Displayalbed)
{};
程序运行时,如果有某个菜单项被选中,则程序跳转到这个函数处运行。
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassMyMIDletextendsMIDletimplementsCommandListener
{
Displaydisp;
TextBoxtb=newTextBox("TextBox演示程序","abcdefg",256,1);
Commandcomm1=newCommand("大写",Command.SCREEN,2);
publicvoidstartApp()
{
tb.addCommand(comm1);
tb.setCommandListener(this);
disp=Display.getDisplay(this);
disp.setCurrent(tb);
}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
publicvoidcommandAction(Commandc,Displayabled)
{
tb.setString(tb.getString().toUpperCase());
}
以上程序中用到了三个函数:
文本框类(tb)的函数
getString()得到文本框上显示的字符串,结果为String
setString()将字符串设置到文本框上
字符串类的函数:
toUpperCase()将字符串中的小写字母转为大写字母。
当程序中的多菜单先后被选中时,各菜单的选中,都会转到同一函数commandAction中执行。
publicvoidcommandAction(Commandc,Displayabled)……。
}
在函数中的参数c和d,是由系统产生并传给函数.所以c和d可以在函数中作为已知数据直接使用。
C中保存着倒致程序转到commandAction函数的菜单变量的名字。
D中保存着这时的屏幕对象。
程序中通过判断c的值可以决定是哪个菜单被选中。
多菜单操作:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassMyMIDletextendsMIDletimplementsCommandListener
{
Displaydisp;
TextBoxtb=newTextBox("TextBox演示程序","abcdefg",256,1);
Commandcomm1=newCommand("大写",Command.SCREEN,1),
comm2=newCommand("小写",Command.SCREEN,2),
exit=newCommand("退出",Command.BACK,1);
publicvoidstartApp()
{
tb.addCommand(comm1);tb.addCommand(comm2);
tb.addCommand(exit);
tb.setCommandListener(this);
disp=Display.getDisplay(this);
disp.setCurrent(tb);
}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanb){}
publicvoidcommandAction(Commandc,Displayabled)
{
if(c==comm1)
tb.setString(tb.getString().toUpperCase());
else
if(c==comm2)
tb.setString(tb.getString().toLowerCase());
elseif(c==exit)
notifyDestroyed();
}
}
其中,notifyDestroyed()函数是MIDlet类的函数,表示撤消本MIDlet;
解释程序中的函数调用方法:
notifyDestroyed();
disp.setCurrent(tb);
有些函数调用时需对象前缀,有些不需。
其实,在Java程序中任何函数都是属于某个类,不存在不属于类的游离函数。
程序中,如果调用其他对象的函数,必须指明对象名,如:
disp.setCurrent(tb);
但,调用本类的函数,可以不加前缀。
notifyDestroyed();
要加前缀,可以:
this.notifyDestroyed();
notifyDestroyed()函数是MyMIDlet类从MIDlet类中继承而来的函数。
;
List
选择的组件,在一组可选项中,选择一个或多个选项。
构造函数一:
publicList(Stringtitle,intlistType)
title表示标题,listType表示类型。
这种方式可以创建一个空白的List对象,没有可选项。
可以在随后的代码中用List的append添加可选项。
构造函数二:
publicList(Stringtitle,intlistType,String[]stringElements,Image[]imageElements)
产生完整的List对象,既有标题,也有内容。
List有三种形式:
Choice.EXCLUSIVE:
单选List
Choice.IMPLICIT:
隐含菜单,是一种单选List,选中时会触发事件
Choice.MULTPLE:
多选List
当显示List后,选中某项时,可以用以下函数得到我们所选中的项目:
publicintgetSelectedIndex()
得到选中项的序号,0,1,2,等。
适合于单选时。
–如果是多选List可以用
–publicintgetSelectedFlags(boolean[]sArray)
返回值返回我们选择的项数,具体的选项在sArray表达。
示例:
publicvoidcommandAction(Commandc,Displayabled)
{
boolean[]b=newboolean[3];
Stringmsg="共选择了"+list.getSelectedFlags(b)+"项,它们分别是:
";
for(inti=0;iif(b[i])msg=msg+txt[i]+"";
TextBoxtb=newTextBox("您的选择是:
",msg,256,1);
disp.setCurrent(tb);
}
Choice.EXCLUSIVE和Choice.MULTIPLE两种形态的List本身并不触发事件,所以在程序中必须再用Command触发事件,在事件处理函数中,检测我们所选的项目。
Choice.IMPLICIT形态的List是单选,但它选中后自身触发Command事件,不需要再设计Command以触发事件,一旦选择,自动调用。
publicvoidcommandAction(Commandc,Displayabled)
{
}
但,这时在c中传入一个常量:
List.SELECT_COMMAND,由此可以区别是菜单还是List触发的事件,如下例:
publicvoidcommandAction(Commandc,Displayabled)
{
if(c==List.SELECT_COMMAND)
{TextBoxtb=newTextBox("您的选择是:
",txt[list.getSelectedIndex()],256,1);
disp.setCurrent(tb);}
else
notifyDestroyed();
}
带图片的List;
try{
img[0]=Image.createImage("/TranslatorPlugin.png");
img[1]=Image.createImage("/LoginAssis.png");
img[2]=Image.createImage("/ExtYouxi.png");
}catch(Exceptione){}
list=newList("请选择文化程度",Choice.IMPLICIT,txt,img);
list.a