




免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
配置手机程序开发环境WTK开发基于JAVA ME平台的手机应用程序第一步就是要选择一个好的开发工具。手机程序开发与PC程序开发有很大的不同点,PC程序可以直接在PC上开发并运行测试,而在手机上没有也肯定不可能提供应用程序开发集成环境和测试工具。通常情况下,我们都是先利用PC机上Java开发工具编写源代码并使用Java编译器和JAVA ME库一起生成JAVA ME手机程序,再将该程序上传到手机上运行。现在,大部分手机厂商都提供其生产的不同机型的模拟器,此模拟器可以在PC上直接运行,真实模拟该型号手机上提供的JAVA ME运行环境。如果安装了手机模拟器,就可以将编译好的手机程序直接在PC的模拟器上测试,等到测试运行正常后再上传到实机上运行。虽然当前有很多工具都可以开发JAVA ME手机程序,其中不乏有功能强大的JBuilder集成开发环境,但是对于初学者来说,使用UltraEdit/NotePad+WTK作为手机程序的开发工具会更好一点。UltraEdit和NotePad都是PC上常用的编辑软件,我们可以使用它们来编写手机程序的代码,然后使用SUN提供的WTK(JAVA ME无线工具包)对源代码进行编译、模拟运行以及上传实机。下面我们将重点介绍WTK的安装和使用。1.安装WTKWTK,全称JAVA ME Wireless ToolKit,它是由SUN公司开发用于支持开发那些可在与移动信息设备框架(MIDP)兼容的设备(如手机、双向呼机和PDA)上运行的Java应用程序。当前WTK的高版本为3.0版,本教程使用2.5.2版。它支持最新的MIDP2.0。您可以到SUN网站下载安装WTK,下面详细介绍下载安装WTK过程。(1)、登录SUN JAVA ME WTK中文版下载网页:/products/Javaewtoolkit/zh_download-2_0.html。(2)、中文版是通过本地化补丁实现的,首先需要下载WTK2.0英文版本,如图三所示,在列表框中选择您的PC安装的操作系统类型(通常PC使用Windows系统居多,本文仅以Windows平台为例,其它平台可参照。),再点击第一个“继续”按钮。 图一:下载WTK2.0页面部分图(3)、如果您未处于登录状态的话,将提示您登录。如果您还未成为SUN会员的话,可以马上注册会员。其登录过程同其它网站会员登录过程相似。(4)、成功登录后,进入英文版文件下载页面,如图四所示,点击下载链接即可下载英文版文件Java Me_wireless_toolkit-2_0-windows.exe,大小为9.89M。 图二:WTK2.0英文版文件下载页面部分图(4)、运行Java Me_wireless_toolkit-2_0-windows.exe安装程序,当系统提示您提供安装目录时,请确保该安装目录的完全合法的路径中不包含任何空格。这将帮助您在今后使用工具包时避免可能出现的问题。(5)、安装完WTK2.0英文版后,回到图三页面,点击第二个“继续”按钮下载中文补丁文件。进入中文补丁文件下载页面,如图五所示,点击下载链接即可下载文件Java Me_wireless_toolkit-2_0-zh.zip,大小为4.07M。 图三:WTK2.0中文补丁文件下载页面部分图(6)、将Java Me_wireless_toolkit-2_0-zh.zip文件解压缩至WTK2.0英文版的安装目录下(缺省安装目录为C:WTK2.0),确保文件是带着目录路径解压的。(7)、WTK2.0中文版本安装成功。2. 使用WTK如果安装WTK成功的话,在开始菜单上选择“程序-JAVA ME Wireless Toolkit2.0-Ktoolbar”,启动WTK工具程序,主界面如图六所示。 图四:WTK运行界面WTK的主要功能包括:新建项目、打开项目、生成项目、运行项目等。 新建项目在编写手机程序之前,都需要使用WTK创建一个新的项目。新建项目的主要步骤:(1)、点击工具栏“新建项目”按钮,弹出“新建项目”对话框,如图七所示。 图五:新建项目对话框(2)、在“项目名字”栏中输入项目名称,如MyProgram;在“MIDlet类名”栏中输入您的手机程序的主类名,如MyMIDlet,在后面章节将会介绍到每个JAVA ME手机程序都必须有一个MIDlet类的子类。(3)、点击“产生项目”按钮,弹出“项目配置”对话框,在此对话框中可以对项目的相关配置进行修改,一般情况下都不需要修改。(4)、点击“确定”按钮,新建项目完成。请注意,此时在主窗口中列出项目Java源文件的路径、资源文件路径和库文件的路径的信息。由于WTK生成程序时,必须要求项目的路径结构一定要规范化,否则不能生成运行程序。图八展示了MyProgram项目生成后,在WTK目录下的路径结构图。WTK将在其子目录apps下为每个项目创建一个同名子目录,并在此子目录下创建bin、src、res、lib四个目录,其中bin目录用于存放目标程序,当使用生成工具产生了可运行的程序将放在此处,一般有*.jar和*.jad文件,其具体意义将在后面的章节详细说明;src目录用于存放源代码;res目录用于存放资源文件;lib目录用于存放程序调用的辅助库文件。 图六:WTK项目路径图 打开项目打开项目是将已存在的项目打开,作为WTK的当前工作项目。通过点击“打开项目”按钮,弹出“打开项目”对话框,您可以从项目列表中选择打开项目。请注意,在此项目列表中仅能选择apps目录下的项目,如果您的项目不在此项目下,将不能使用WTK打开项目。 生成项目当您新建项目并编写好源代码或者打开旧项目后,可以通过点击工具栏上的“生成项目”按钮,WTK将自动调用Java编译器为项目程序进行编译。如果程序代码有语法错误将在主窗口中产生错误提示,否则为项目生成*.jar和*.jad目标文件。 运行项目成功生成项目目标文件后,可点击工具栏上的“运行项目”按钮,WTK将启动模拟器,并加载项目bin目录下的*.jar和*jad文件。模拟器界面同相应型号的外观相似,您可以通过模拟器上的键盘操作项目程序。图九展示PushPuzzle游戏在模拟器上运行结果。 图七:PushPuzzle游戏在模拟器上运行结果图预备知识:1智能手机 了解智能手机的概念,在百度百科上搜索。得到的概念是: (Smartphone),是指“像个人电脑一样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方服务商提供的程序,通过此类程序来不断对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类手机的总称”。 所以,智能手机至少有三个特征:独立的操作系统、强大的扩展性、无线网络连接。2手机操作系统 Symbian(中文名:塞班)长期居于首位,诺基亚为主。 Android(中文名:安卓)是基于Linux平台开源手机操作系统,谷歌推出,主要品牌美国摩托罗拉、中国台湾HTC、韩国三星、韩国LG、英国索尼爱立信,中国大陆联想、华为、中兴、魅族等Windows Mobile(简称:WM)软件巨头微软出品,与桌面PC和Office的兼容性方面具有先天的优势,而且具有强大的多媒体性能,办公娱乐两不误,最有潜力的操作系统之一。中国台湾HTC、韩国三星电子、韩国LG、英国索尼爱立信、阿联酋i-mate,诺基亚与2011年初正式宣布与微软合作,将采用WM操作系统;目前各大山寨厂商也同样生产着大量WM产品 另外还有著名的iphone、黑莓等等,不一一介绍。3手机程序开发语言 手机应用程序开发技术,对于不同操作系统,开发技术也有一定的区别,但使用的程序语言也基本上就是常用的Java、C、C+等语言。4Java Mel Java SE(Java Standard Edition)是Java各应用平台的基础,主要用于桌面开发和低端商务应用开发。 l Java EE(Java Enterprise Edition)以Java SE为基础,主要用于企业级应用开发。提供面向分布式、多层式、组件式和Web应用程序的开发,定义了一系列的服务、API、协议。 l Java ME(Java Micro Edition)是面向小型数字设备(如手机、PDA、股票机等)的开发及部署应用程序平台。 5WTK WTK 的全称是Sun J2ME Wireless Toolkit Sun的无线开发工具包。本教程考虑到入门的宗旨,只使用WTK,不使用第三方开发工具。6代码编辑 Jave Me源程序的编辑,可以使用记事本,也可以使用UltraEdit(到网上去找)。7开发环境配置 安装java环境(jdk1.6)、安装WTK(2.5.2)第一讲 第一个手机程序第一步,新建项目 过程演示,其中项目名字和类名,可以一样,也可以不一样。但一定要注意,类名的第一个字母必须是大写的,而且类名要和后面编写的源程序中的类名一致。 新建项目的选项一般选默认就可以,这里我们推荐把Target Platform 设置为MIP1.0.第二步,建立源文件 首先在找到代码文件所处的位置,一般默认的是:C:Documents and SettingsAdministratorJava Mewtk2.5.2apps文件夹下的项目名src 编写代码可以使用记事本,也可以使用其他编辑器,但一定要保证所建立的文件应该是一个纯文本的文件,主文件名与类名一致,扩展名是.java。第三步,编写代码import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class HelloWorld extends MIDlet private Display display1; private Form showForm; public HelloWorld() display1 = Display.getDisplay(this); showForm=new Form(HelloWorld); StringItem strItem=new StringItem(Hi,这是我的第一个手机程序); showForm.append(strItem); public void startApp() throws MIDletStateChangeException display1.setCurrent(showForm); public void pauseApp() public void destroyApp(boolean arg0) 代码简单分析: 1一个程序有生命周期:运行、暂停、死亡(退出)。 一个类包括若干个函数(class)HelloWorld函数,这是构造函数,它的特点是名称必须与类名相同,一个类(解释一下),必须至少有一个构造函数。具体的原因不解释了,大家见多了习惯了。这是固定的格式。startApp函数,是程序开始执行的地方,也就是说,一个程序,在执行的时候,肯定首先是执行这个函数(函数是程序的组成部分)。pauseApp暂停 destroyApp退出2修饰符的意义: 如public 、void 等是用来修饰函数的,有一定的功能,这里不多解释。3,函数的参数: 函数名后面括号里的内容就是参数,每个函数需要的参数不一样,这是由函数的功能决定的,如果深入学习,会有详细的资料供大家参考。4.import引入,其实是告诉WTK,到什么地方去找需要的资源。面向对象的程序设计,JAVA提供了许多类,这些类的代码早就写好了,不需要我们写,但需要调用的时候,应该知道到什么地方去找。 附:完整的代码import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class CommandTest extends MIDlet implements CommandListener private Display display1; private Form showForm; public CommandTest() display1 = Display.getDisplay(this); showForm=new Form(测试退出按钮); Command exitCommand=new Command(退出,Command.STOP,2); showForm.addCommand(exitCommand); showForm.setCommandListener(this); public void startApp() throws MIDletStateChangeException display1.setCurrent(showForm); public void pauseApp() public void destroyApp(boolean arg0) notifyDestroyed(); public void commandAction(Command cmd,Displayable displayable) destroyApp(true); 第二讲 按钮和事件第一步,新建项目新建一个项目CommandTest,并新建一个源代码文件CommandTest.java。由于每一个Java Me程序都有生命周期对应的函数,所以把第一讲的HelloWorld.java复制过来,进行修改即可。先把类名和构造函数的名字改过来。第二步,编写按钮的相关代码 对照HelloWorld的源代码,进行分析 以下是构造函数中的代码,共五条语句,先使用前面四条。display1 = Display.getDisplay(this); showForm=new Form(测试退出按钮); -以上两句的功能显示窗口,标题上的文字为“测试退出按钮” Command exitCommand=new Command(退出,Command.STOP,2); -声明并初始化一个按钮,这个按钮的名字叫exitCommand,按钮上显示的文本为“退出”。 showForm.addCommand(exitCommand); -在当前的窗口中显示exitCommand按钮。第三步,实现退出功能1设置继承监听的功能:即在类的名称后加上implements CommandListener,这两个词的英文解释,实现,命令(按钮)监听,这只是增加了一个监听的功能,即可以监听了。同时还必须在构造函数中加上showForm.setCommandListener(this);这一句,是具体实现监听的功能的。2增加按钮的方法(即在点击该按钮的时候,去执行这一方法)解释方法或者函数的概念、格式等。public void commandAction(Command cmd,Displayable displayable) destroyApp(true); 这个方法里面只有一个语句,就是去执行退出这一方法(生命周期中的死亡)3在destroyApp这个函数中加上退出程序的代码。 notifyDestroyed();这个语句就是调用了一个退出功能。是具体实现退出程序的功能。本讲完整的代码:import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class CommandTest extends MIDlet implements CommandListener private Display display1; private Form showForm; public CommandTest() display1 = Display.getDisplay(this); showForm=new Form(测试退出按钮); Command exitCommand=new Command(退出,Command.STOP,2); showForm.addCommand(exitCommand); showForm.setCommandListener(this); public void startApp() throws MIDletStateChangeException display1.setCurrent(showForm); public void pauseApp() public void destroyApp(boolean arg0) notifyDestroyed(); public void commandAction(Command cmd,Displayable displayable) destroyApp(true); 第三讲 Ticker滚动显示日期Calendar第一步,新建项目新建一个项目TickerTest,并新建一个源代码文件TickerTest.java。由于每一个Java Me程序都有生命周期对应的函数,所以把第一讲的HelloWorld.java复制过来(或者把第二讲中的CommandTest.java复制过来),进行修改即可。先把类名和构造函数的名字改过来。第二步,加入Ticker类在构造函数中加入Ticker控件,产生滚动显示的效果,代码为:Ticker ticker1=new Ticker(这里输入要显示的内容);showForm.setTicker(ticker1);解释:一个类的使用格式,要慢慢来熟悉,第一句是创建一个Ticker对象,一个类只有创建了对象才能使用。在本讲附录中将简单介绍关于面向对象的编程知识。第三步,加入Calendar类使用Calendar类,必须在MIDLET类的前面加上如下语句:import java.util.*;它的功能是指出Calendar类在什么地方能找到,与其他两个import语句的意义是一样的。在构造函数中加入如下代码:Calendar calendar=Calendar.getInstance(); String strYear=calendar.get(Calendar.YEAR)+年; String strMonth=(calendar.get(Calendar.MONTH)+1)+月; String strDay=calendar.get(Calendar.DAY_OF_MONTH)+日;第一句是创建一个对象calendar,这个对象是Calendar类的一个对象,一定要注意大小写不同。后面三句是通过调用calendar对象的年月日,把年月日的数字分别存放到三个字符串变量中,strYear、strMonth、strDay都是String类型的变量,也就是字符串变量。 注意:月份加1是因为这里取得的月份数值是0-11,所以要加1才是月份。第四步,在Ticker对象中滚动显示年月日信息Ticker ticker1=new Ticker(这里输入要显示的内容);把内容改写:Ticker ticker1=new Ticker(当前日期:+strYear+strMonth+strDay);完毕该讲完整代码如下:import javax.microedition.lcdui.*;import javax.microedition.midlet.*;import java.util.*;public class TickerTest extends MIDlet implements CommandListener private Display display1; private Form showForm; public TickerTest() display1 = Display.getDisplay(this); showForm=new Form(滚动效果-时间控件); Calendar calendar=Calendar.getInstance(); String strYear=calendar.get(Calendar.YEAR)+年; String strMonth=(calendar.get(Calendar.MONTH)+1)+月; String strDay=calendar.get(Calendar.DAY_OF_MONTH)+日; Ticker ticker1=new Ticker(当前日期:+strYear+strMonth+strDay); showForm.setTicker(ticker1); Command exitCommand=new Command(退出,Command.STOP,2); showForm.addCommand(exitCommand); showForm.setCommandListener(this); public void startApp() throws MIDletStateChangeException display1.setCurrent(showForm); public void pauseApp() public void destroyApp(boolean arg0) notifyDestroyed(); public void commandAction(Command cmd,Displayable displayable) destroyApp(true); 附录:JAVA面对对象的基础知识一、面向对象的基本思想面向对象是一种新兴的程序设计方,法或者是一种新的程序设计规范(paradigm),其基本思想是:万物皆对象。使用对象、类、继承、封装、消息等基本概念来进行程序设计。1对象对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。2类把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。分类的原则是抽象。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。3消息消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。二、面向对象的基本特征:1封装性封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的交叉感染,使软件错误能够局部化,大大减少查错和排错的难度。2继承性特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的特殊类。在java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。3多态性对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:几何图形的绘图方法,椭圆和多边形都是几何图的子类,其绘图方法功能不同。三、JAVA面向对象的基础知识1类:一个类的实现包括两个部分:类声明和类体。类声明就是一个类的头部,类体中包括成员变量、构造方法(与类名相同,至少一个)和成员方法。2对象 类实例化可生成对象,对象通过消息传递来进行交互。消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。一个对象的生命周期包括三个阶段:生成、使用和消除。(1)对象的生成 对象的生成包括声明、实例化和初始化。格式为:type objectName=new type(paramlist); 声明:type objectName 声明并不为对象分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。 实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同对象分别占据不同的内存空间。 生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。2. 对象的使用 通过运算符.可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。 调用对象的变量格式:objectReference.variableobjectReference是一个已生成的对象,也可以是能生成对象的表达式例:p.x= 10;tx=new Point( ).x; 调用对象的方法格式:objectReference.methodName(paramlist);例如:p.move(30,20);new Point( ).move(30,20); 3. 对象的清除 当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。System.gc( );当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。第四讲 TextField类的使用和事件在和手机的交互过程中,文本输入框是最经常使用的,比如:软件短信、手机号码、网址等等。Java Me中提供了一个TextField类,下面通过实例研究这个类的用法。第一步,新建项目新建一个项目TextFieldTest,并新建一个源代码文件TextFieldTest.java。由于每一个Java Me程序都有生命周期对应的函数,所以把第二讲的CommandTest.java复制过来进行修改即可。先把类名和构造函数的名字改过来。第二步,加入TextField类在构造函数中加入TextField控件,代码为: TextField tf=new TextField(请输入:,5,TextField.NUMERIC); showForm.append(tf);/把输入框显示到窗口中去解释: TextField tf=new TextField(请输入:,5,TextField.NUMERIC); 创建一个Textfield实例(也就是对象),这个实例的名字叫做tf,在创建这个实例的时候,括号中有几个参数,以逗号隔开,它们的意义如下:请输入: 这是提示信息,出现在文本框的前面,内容任意。 表示输入之前是否有显示内容,内容为空表示输入之前什么也没有,大家可以加上点内容,以实验之。5 限定长度,最多输入五个字符。TextField.NUMERIC 限定类型,只能输入整数。第三步,给TextField添加一个事件所谓事件,就是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本的改变等等。事件有系统事件和用户事件。系统事件由系统激发,如时间每隔24小时,银行储户的存款日期增加一天。用户事件由用户激发,如用户点击按钮,在文本框中显示特定的文本。事件驱动控件执行某项功能。事件由事件源所激发。向事件源注册的事件侦听器可接收有关特定事件类型的通知 在第二讲中,我们点击退出按钮就是一个事件,我们这个程序就是在Command.java基础上修改的,还保留有退出按钮的事件,大家可以查看。 要给TextFiel添加事件,需要以下操作 1,设置继承机制,就是在类的声明部分加上如下内容:implements ItemStateListener 由于程序中为命令按钮设置了继承机制implements CommandListener,所以,应该把两个继承的设置合并起来,写为:implements CommandListener,ItemStateListener 2在MIDlet类中增加事件的方法(也就是函数)public void itemStateChanged(Item item) 从方法的名称,顾名思义,就是项目状态改变,也就是每次在输入框中输入数字的时候,都会引起输入框的改变,而只要一改变,就会去自动执行这个方法里面对应的代码。3在构造函数中设置事件的关联在构造函数中加上如下语句,设置事件关联。(大家可以回去看一看第二讲的内容,按钮的事件也是这个做的,先是设置类的继承机制,再是添加事件的方法,还要在构造函数中添加事件关联)。showForm.setItemStateListener(this);4添加事件方法代码在事件的方法中,添加以下代码(当然,这里的代码只是学习中的验证,代码不同实现的功能也就不一样,这一点相信大家会明白)。System.out.println(你正在输入);编译一下,正确,运行一下。注意,显示“你正在输入”是出现在控制台上去的。我们改一下这个显示内容:System.out.println(你输入的内容为:+tf.getString();我的目的是想随着输入一个个数字,控制台上同步显示出“你输入的内容为:XXX”。编译,出错。出错信息如下正在生成 TextFieldTestC:Documents and SettingsAdministratorJava Mewtk2.5.2appsTextFieldTestsrcTextFieldTest.java:40: 找不到符号符号: 变量 tf位置: 类 TextFieldTest System.out.println(你输入的内容为:+tf.getString(); 1 错误com.sun.kvem.ktools.ExecutionException 我们对这个出错信息进行研究,错误只有一个,就是tf这个变量找不到。原因是什么呢?在这个程序中,其他的变量还有几个,如display1和showForm都是变量。我们查看代码会发现,这两个变量,在所有的函数外面有说明(专业术语叫做声明),这样的变量在所有函数中都能使用,叫做全局变量,而tf没有这种声明,所以就不是全局变量,它是个局部变量。解决这个错误的方法是,进行全局变量的声明,相应的变量定义,在构造函数中就要去掉了。(这一点非常重要)本讲的完整程序代码如下:import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class TextFieldTest extends MIDlet implements CommandListener,ItemStateListener private Display display1; private Form showForm; private TextField tf; public TextFieldTest() display1 = Display.getDisplay(this); showForm=new Form(测试文本输入框); tf=new TextField(请输入:,5,TextField.NUMERIC); showForm.append(tf); Command exitCommand=new Command(退出,Command.STOP,2); showForm.addCommand(exitCommand); showForm.setItemStateListener(this); showForm.setCommandListener(this); public void startApp() throws MIDletStateChangeException display1.setCurrent(showForm); public void pauseApp() public void destroyApp(boolean arg0) notifyDestroyed(); public void commandAction(Command cmd,Displayable displayable) destroyApp(true); public void itemStateChanged(Item item) System.out.println(你输入的内容为:+tf.getString(); 第五讲 ChoiceGroup类的使用在手机软件开发中,符合人们熟悉的窗口界面习惯,经常会用到选项框,如单选框、复选框等。Java Me提供了一个ChoiceGroup类,来实现这些控件的功能。第一步,新建项目新建一个项目ChoiceGroupTest,并新建一个源代码文件ChoiceGroupTest.java。由于每一个Java Me程序都有生命周期对应的函数,所以把第二讲的CommandTest.java复制过来进行修改即可。先把类名和构造函数的名字改过来,对于窗口标题的字符,也应进行相应的修改。第二步,添加ChoiceGroup类首先,在所有的函数外面声明一个ChoiceGroup类型的变量cgprivate ChoiceGroup cg;在构造函数中,添加上如下代码:cg=new ChoiceGroup(请选择你喜欢的编程语言:,Choice.MULTIPLE);cg.append(JAVA,null);cg.append(C,null);cg.append(C+,null);cg.append(VB,null);cg.append(CPL,null);showForm.append(cg);解释:第一句是创建一个ChoiceGroup类的实例,并把这个实例命名为cg,在创建过程中,有两个参数,请选择你喜欢的编程语言:,这个参数当然是提示信息,出现在所有选项的前面。Choice.MULTIPLE,这是第二个参数,它的作用是指定选项的类型。EXCLUSIVE对应的是单选,MULTIPLE对应的是多选,我们现在可以修改一下,进行验证。后面的五个语句,非常相似,都是实现一个选项的显示信息的。这里不过多解释。最后的语句,用来把cg这个ChoiceGroup实例,显示到窗口里面去。第三步,添加事件在添加一个事件的时候,要做什么工作呢?请大家回忆第四讲里面的内容。1,设置继承机制,就是在类的声明部分加上如下内容:implements ItemStateListener 由于程序中为命令按钮设置了继承机制implements CommandListener,所以,应该把两个继承的设置合并起来,写为:implements CommandListener,ItemStateListener 2在MIDlet类中增加事件的方法(也就是函数)public void itemStateChanged(Item item) 从方法的名称,顾名思义,就是项目状态改变,也就是每次在输入框中输入数字的时候,都会引起输入框的改变,而只要一改变,就会去自动执行这个方法里面对应的代码。3在构造函数中设置事件的关联在构造函数中加上如下语句,设置事件关联。(大家可以回去看一看第二讲的内容,按钮的事件也是这个做的,先是设置类的继承机制,再是添加事件的方法,还要在构造函数中添加事件关联)。showForm.setItemStateListener(this);4添加事件方法代码在事件的方法中,添加以下代码(当然,这里的代码只是学习中的验证,代码不同实现的功能也就不一样,这一点相信大家会明白)。String tmp=; for(int i=0;icg.getSize();i+) if(cg.isSelected(i) tmp=tmp+cg.getString(i)+; System.out.println(你选择了:+tmp);解释:第一个语句,定义了一个字符串类型的变量tmp,它的初始值为空,用它来存储选择项目的内容。后面的一个for语句,是个典型的循环,所谓循环,就是在满足条件的情况下要反复执行大括号里面的语句。循环的条件由三部分组成:第一部分是初始化(定义了一个整形的变量i,并且给它一个初始值为0);第二部分是条件icg.getSize(),getSize()方法是用来获取选项的个数;第三部分是增量,i+的意思就是i=i+1。前面说的是for循环的头部,循环体里面只有一个if语句,顾名思义,就是如果,也就是判断一下if语句括号里面的条件,真则执行大括号里面的代码,否则不执行,转到if后面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工绩效考核方案制定工具
- 奇异之伞800字(7篇)
- 我看雷锋2000字(12篇)
- 农村生态环境保护与资源开发联动合同
- 白桦林意象解析与文学价值探索教案
- 企业市场调查分析数据化报告模板
- 日记爬山550字14篇
- 纪念白求恩课件
- 发人深思的拍卖会900字11篇
- 企业员工手册及政策宣贯平台
- 个人信访材料模板范文
- 解读国有企业管理人员处分条例(2024)课件(全文)
- Unit 4 Section A(1a-Pronunciation)课件人教版2024新教材七年级上册英语
- DL∕T 2442-2021 燃气内燃机分布式能源站技术监督规程
- 创新创业基础-理论、案例与训练(大学生创新创业教育课程)全套教学课件
- DZ∕T 0148-2014 水文水井地质钻探规程(正式版)
- 小学语文四年级下册语文修改病句60题练习及答案
- 肺部体格检查
- 《信息检索与处理(修订版)》课件上 第1单元 检索信息-第2单元第一课 评价和选择信息
- 人工智能在铸造领域的应用
- 开展市场调研和客户分析
评论
0/150
提交评论