1、手机板书内容手机可以编程吗?手机硬件,基本可以按计算机对待。作为计算机,最基本的部件是主机(处理器CPU+内存)。从软件上看就是操作系统。结论:手机实际上就是一台小的计算机,其中配置一定的处理器和一定容量的内存,并工作在某种操作系统下。常见的手机芯片(CPU):目前英国ARM架构占据手机处理器90%的市场份额。1.Intel的XScale处理器2.ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 3. OMAP:无线设备制造商,诸如诺基亚、索尼爱立信、Palm、惠普公司及索尼等业界顶尖的设备制造商
2、,以及诸如宏碁、LuckyGoldstar、HTC、Sendo及其它的主要设计制造商均宣布支持TI的OMAP处理器平台。常见的手机操作系统:操作系统1. Symbian 操作系统:Symbian系统的手机目前比较常见的是Nokia、三星、西门子2.WindowsMobile (windows CE)操作系统3. iOS系统: iphone系列手的操作。4 Palm系统5. .Android系统.新型手机操作系统,支持无线互联网技术。主流的手机编程体系: Midp Adriod本课程以MIDP手机程序设计为框架展开。编程工具WTK2.5,它要求jdk版本为1.5版以上。用WTK开发一个手机程序的
3、过程: 新建一个项目(new project),完成后结果:注意以下三个信息:Place Java source files in C:WTK25apps演示程序src 将java源程序放在C:WTK25apps演示程序src文件夹中。只有将源程序放在这个位置上,才能被WTK找到并编译。Place application resource files in C:WTK25apps演示程序res将项目所需的资源文件(如图片)存放在C:WTK25apps演示程序res文件夹中,只有这个文件夹中的资源文件才能被WTK读出。Place application library files in C:WT
4、K25apps演示程序lib这个文件夹中存放外来的库文件(略)按以上要求存放文档后,就可以编译程序(Build),编译过程中可能产生错误,那么必须改正源程序中的错误,再编译,直到程序无错为止。运行程序(Run)。手机程序结构:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class DEMO extends MIDlet public void startApp() public void pauseApp() public void destroyApp(boolean b)以上是一个最
5、简单的手机程序,它可以表明一个手机程序的基本结构:1. 手机程序由若干类(class)构成从java程序的观点,类应如下:class 类名2. 在若干类中,必须且只能有一个主类。它是程序中最开始执行的类。主要类有两个标志:public、必须扩展于MIDlet类。import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class DEMO extends MIDlet public void startApp() public void pauseApp() public void destroyAp
6、p(boolean b)3. java类的写法:class 类名变量声明;/可有可无,可多可少函数声明;/可有可无,可多可少变量是程序运行过程中用于存放数据的空间,这些空间是以变量的形式出现,变量需要声明类型名 变量名int x,y; 声明了x,y两个整型变量,存放整数。double z; 声明了一个浮点型变量z,存放实数。char c; 变量c中存放一个字符String str; str可以存放一个字符串。函数,由一组语句构成的程序段。 值类型 函数名(参数表)函数体;如:public void destroyApp(boolean b) X=7;函数是对数据的加工过程,它由名称、参数表(加
7、工的原料,也就是被计算的数据)、值类型(加工结果的类型)以及函数体(加工过程)。考查手机程序:public class DEMO extends MIDlet public void startApp() public void pauseApp() public void destroyApp(boolean b)这个手机程序是一个类,名字是DEMO,它是扩展于MIDlet类。类中没有声明变量,声明了startApp、pauseApp和destroyApp三个函数。三个函数都没有函数体。可见,作为一个手机程序必须是一个java类,而且必须扩展于MIDlet类,声明startApp、pause
8、App和destroyApp三个函数。在手机程序中,可能会用到一些其他类,如MIDlet,在程序中必须导入(import)这些类。import javax.microedition.midlet.*;import javax.microedition.lcdui.*;MIDlet类就在javax.microedition.midlet包(文件夹)中。*表示所有类。类似于C中的 #include的作用。 第三讲 在手机程序中的三个函数是与手机上的一些事件相关联的,当手机程序运行过程中发生了某些事件时,系统就会自动调用这些函数。startApp函数:当手机程序运行时,首先初始化(构造函数,init
9、函数),然后自动调用该函数。所以它是一个程序的入口部分,所以一个程序的功能代码将从这个函数开始。pauseApp函数:当一个手机程序运行时,如果有了电话呼叫、短信息,这时系统会暂停本程序,暂停本程序之前,自动调用该函数。因此在接听电话或阅览短信之前,程序应该做的准备工作代码可以写在该函数中。destroyApp函数:在程序即将结束时,调用的函数。在这个函数中, 可以设计一些程序的善后处理代码。程序中这三个函数是必不可少的,除此之外,程序还可以设计其他的函数甚至其他类。在手机上显示文本框:import javax.microedition.midlet.*;import javax.microe
10、dition.lcdui.*;public class DEMO extends MIDlet Display display; TextBox tb=new TextBox(“标题”,“正文”,200,0); public void startApp() display=Display.getDisplay(this); display.setCurrent(tb); public void pauseApp() public void destroyApp(boolean b) 可以显示在屏幕上的对象必须是Dispalyable类的子类的对象。1 声明并创建TextBox对象。TextBo
11、x tb=new TextBox(“标题”,“正文”,200,0);TextBox生时必须给出四个参数:标题,正文,最大长度,输入限制。2.取得显示屏幕Display disp=Display.getDisplay(this);3.将可显组件设置到屏幕。 disp.setCurrent(tb);第四讲: 手机程序中的菜单(命令项)。 MIDP中的菜单是由Command类实现。 声明并产生命令项的方法: Command c; C=new Command(“文字”,命令型态,优先级); 或者 Command c=new Command(“文字”,命令型态,优先级) 以上的语法中,命令型态: 命令类
12、型可以是下列8个值之一 Command.BACK:返回前一屏幕; Command.CANCEL:取消当前正在进行的工作; Command.STOP:中断当前正在运行的动作。 Command.EXIT:退出应用程序; Command.HELP:请求在线帮助; Command.ITEM:选择命令是当前屏幕中的某一项; Command.SCREEN:应用到当前屏幕的命令; Command.OK:确定当前正在进行的动作;不同型态的命令将出现的位置不同。优先级部分表现为一个整数,整数越小,优先级越高。命令项产生后,可以用addCommand()函数将命令项设置到Dispalyable(如TextBox)
13、.命令型态决定命 令选项出现的位置:命令项出现在屏幕最下行。点中两个软件按钮,就可以选中某个菜单。左边永远只能出现一项菜单。其他菜单都会出现在右边,其他菜单如果有多项,则折迭成一个menu多级菜单。所以,使用频率最高的菜单应该设计在左边。BACK、CANCEL、STOP和EXIT型态的菜单可以出现在左边,其他四种型态只能出现在右边。总结,各种菜单项出现的规律: 型态决定位置,如果把型态也理解为一种优先的话,那么上述八种型态的优先级别是依次降低的。高四级可以出现在左边。除型态之外,型态相同的前提下优先级可以决定各菜单出现次序。Command c=new Command(“文字”,命令型态,优先级
14、)优先级值越小,越先出现。即: 菜单出现的次序是:先决定于型态;型态相同时,决定于优先级;型态和优先级都相同,则决定于在程序中添加的次序。菜单响应: 当用户选定了某菜单时,都应该产生某一个动作。程序中总需要将某些代码的执行与某菜单相联系,这就是事件模型。MIDP中的事件模型: 事件,是手机中某状态改变。这些事件有些是由系统产生的,如手机程序被呼叫中断。有些事件是人为产生的,如按下了某按键。 系统事件的响应,由系统负责,如startApp,pauseApp,destroyApp函数的调用就是如此。但人为产生的按键事件,必须在程序中将事件与动作(函数)对应。这种编程规律,就是事件模型。import
15、 javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class MyMIDlet extends MIDlet Display disp; TextBox tb=new TextBox(TextBox演示程序,天气真好.,256,1) ; Command comm1=new Command(退出,Command.SCREEN,2),comm2=new Command(还原,Command.SCREEN,1), comm3=new Command(清除,Command.EXIT,2),comm4=new Co
16、mmand(选项,Command.SCREEN,2); public void startApp()tb.addCommand(comm4); tb.addCommand(comm1);tb.addCommand(comm2);tb.addCommand(comm3); disp=Display.getDisplay(this); disp.setCurrent(tb); public void pauseApp() public void destroyApp(boolean b)事件: 手机上发生的状态改变。有些事件由系统产生,如:手机程序的运行(初始化),中断,撤消;系统产生的事件的响应
17、,由系统规定。有些事件由操作者产生,如:操作者按下键盘上的某键。这些事件可以在程序中通过程序处理。这样的事件分成两大类:高级事件与低级事件。高级事件:由操作者按下软件按钮产生的事件。对于高级事件的响应与硬件无关,容易移植,针对某公司某款式型号上写出的高级事件响应程序,将它移植到另一公司另一款式或另一个型号的机器上,一定能正确执行。菜单事件就是高级事件之一。低级事件:指操作者按下除软件按钮之外的其他按键所产生的事件。由于不同公司不同款式不同型号上,对这些按键的定义可能差别,所以针对某机型上设计的低级事件响应程序,在另一机型上不保证能正确运行。可见,低级事件与硬件相关,不保证移植性。菜单事件的响应
18、: 菜单事件,是由一个接口去监视并处理。CommandListener程序中,首先必须指定事件的监视器,它负责监视事件是否发生,当事件发生后,进行处理。监视器是一个类(的对象),任何类都以指定为监视器,但它必须实现CommandListener接口. class A implements CommandListener最简单的情况下,也可以指定主类(程序中MIDlet的派生类)作监视器。public class A extends MIDlet implements CommandListener.Java语言规定,当一个类实现(implements)了接口时,在该类中必须写出接口中的所有接口
19、函数的函数体。在接口中只声明函数,但没有函数体。CommandListener接口中只定义了一个抽象函数(只有声明,没有函数体): public void commandAction (Command c, Displayalbe d);接口的作用,将菜单项选中的动作,与commandAction函数相关联,即当选中菜单时,程序一定会转到这个函数。所以,在实现该接口的类中,就应该给出这个函数的函数体。public void commandAction(Command c, Displayalbe d);程序运行时,如果有某个菜单项被选中,则程序跳转到这个函数处运行。import javax.m
20、icroedition.midlet.*;import javax.microedition.lcdui.*;public class MyMIDlet extends MIDlet implements CommandListener Display disp; TextBox tb=new TextBox(TextBox演示程序,abcdefg,256,1) ; Command comm1=new Command(大写,Command.SCREEN,2); public void startApp() tb.addCommand(comm1); tb.setCommandListener(
21、this); disp=Display.getDisplay(this); disp.setCurrent(tb); public void pauseApp() public void destroyApp(boolean b) public void commandAction(Command c, Displayable d) tb.setString(tb.getString().toUpperCase(); 以上程序中用到了三个函数: 文本框类(tb)的函数 getString() 得到文本框上显示的字符串,结果为String setString() 将字符串设置到文本框上 字符串类
22、的函数: toUpperCase() 将字符串中的小写字母转为大写字母。当程序中的多菜单先后被选中时,各菜单的选中,都会转到同一函数commandAction中执行。public void commandAction(Command c, Displayable d) 。在函数中的参数c和d,是由系统产生并传给函数.所以c和d可以在函数中作为已知数据直接使用。C中保存着倒致程序转到commandAction函数的菜单变量的名字。D中保存着这时的屏幕对象。程序中通过判断c的值可以决定是哪个菜单被选中。多菜单操作:import javax.microedition.midlet.*;import
23、javax.microedition.lcdui.*;public class MyMIDlet extends MIDlet implements CommandListener Display disp; TextBox tb=new TextBox(TextBox演示程序,abcdefg,256,1) ; Command comm1=new Command(大写,Command.SCREEN,1), comm2=new Command(小写,Command.SCREEN,2), exit=new Command(退出,Command.BACK,1); public void startA
24、pp() tb.addCommand(comm1);tb.addCommand(comm2); tb.addCommand(exit); tb.setCommandListener(this); disp=Display.getDisplay(this); disp.setCurrent(tb); public void pauseApp() public void destroyApp(boolean b) public void commandAction(Command c, Displayable d) if (c=comm1) tb.setString(tb.getString().
25、toUpperCase(); else if (c=comm2) tb.setString(tb.getString().toLowerCase(); else if (c=exit) notifyDestroyed();其中,notifyDestroyed()函数是MIDlet类的函数,表示撤消本MIDlet;解释程序中的函数调用方法:notifyDestroyed(); disp.setCurrent(tb);有些函数调用时需对象前缀,有些不需。其实,在Java程序中任何函数都是属于某个类,不存在不属于类的游离函数。程序中,如果调用其他对象的函数,必须指明对象名,如:disp.setCur
26、rent(tb);但,调用本类的函数,可以不加前缀。notifyDestroyed();要加前缀,可以: this. notifyDestroyed();notifyDestroyed()函数是MyMIDlet类从MIDlet类中继承而来的函数。;List 选择的组件,在一组可选项中,选择一个或多个选项。 构造函数一:public List(String title,int listType) title表示标题,listType表示类型。这种方式可以创建一个空白的List对象,没有可选项。可以在随后的代码中用List的append添加可选项。构造函数二:public List(String
27、title, int listType, String stringElements, Image imageElements)产生完整的List对象,既有标题 ,也有内容。List有三种形式:Choice.EXCLUSIVE:单选ListChoice.IMPLICIT:隐含菜单,是一种单选List,选中时会触发事件Choice.MULTPLE:多选 List当显示List后,选中某项时,可以用以下函数得到我们所选中的项目:public int getSelectedIndex( )得到选中项的序号,0,1,2,等。适合于单选时。 如果是多选List可以用 public int getSele
28、ctedFlags(boolean sArray)返回值返回我们选择的项数,具体的选项在sArray表达。示例:public void commandAction(Command c,Displayable d) boolean b=new boolean3; String msg=共选择了+list.getSelectedFlags(b)+项,它们分别是:; for (int i=0; ib.length; i+) if (bi) msg=msg+txti+ ; TextBox tb=new TextBox(您的选择是:,msg,256,1); disp.setCurrent(tb);Cho
29、ice.EXCLUSIVE和Choice.MULTIPLE两种形态的List本身并不触发事件,所以在程序中必须再用Command触发事件,在事件处理函数中,检测我们所选的项目。Choice.IMPLICIT形态的List是单选,但它选中后自身触发Command事件,不需要再设计Command以触发事件,一旦选择,自动调用。public void commandAction(Command c,Displayable d)但,这时 在c中传入一个常量:List.SELECT_COMMAND,由此可以区别是菜单还是List触发的事件,如下例:public void commandAction(Co
30、mmand c,Displayable d) if (c=List.SELECT_COMMAND) TextBox tb=new TextBox(您的选择是:,txtlist.getSelectedIndex(),256,1); disp.setCurrent(tb); else notifyDestroyed();带图片的List;try img0=Image.createImage(/TranslatorPlugin.png); img1=Image.createImage(/LoginAssis.png); img2=Image.createImage(/ExtYouxi.png); catch(Exception e) list=new List(请选择文化程度,Choice.IMPLICIT,txt,img); list.a
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1