小元素状态改变侦听.docx
《小元素状态改变侦听.docx》由会员分享,可在线阅读,更多相关《小元素状态改变侦听.docx(13页珍藏版)》请在冰豆网上搜索。
小元素状态改变侦听
第四章高级用户界面与事件处理(3)
首先给大家道歉,没有做好规则要求,课没有上好,导致了几个同学不能按时上机,于心不安,这样其实是害了大家,因此,我要再次强调规则,并落实这些规则。
这些内容应该在第一次课的时候就应该讲清楚,并落实,请下学年一定要注意。
1在课堂上委婉地阐述规则和执行,如上课纪律严肃,不定期定名,并记入成绩,从教学办拿来学生的名单并装在一个夹子里。
2规范要求上机报告的格式和内容,并交给学生电子版的报告范例,请准时交实验报告(委婉地说出如不按要求,不收)。
实验报告可以借鉴,但不许抄袭,尤其是总结都一样就有点令人困惑了,一旦发现,两份报告均作0分处理。
(1)由于课的安排的原因,导致不能很好地在实验前拿出实验报告的情况,必须提供类图和程序代码的初稿。
上机前必须带课堂笔记和兰笔,请遵守执行。
(2)对于一次实验中包括几个题目而需要分多次上机实验的情况,每次都需要提供一份完整的报告,几次报告完成之后,装订后交上来。
(3)一般实验报告的上交时间是上机实验后的第三天。
3低级用户界面上完之后,进行上机考核,不能通过者不参加期末考试。
4精心备课,以学生掌握为准,而不是以我是否完成目标,我是否讲的结构严谨为准。
每次上完课,要告诉同学应该看教材的哪些内容和预习哪些内容。
5督促学生在自己的机器上装好软件,在实验课中没有完成的,课后一定要完成。
6重新做机器,将学生成绩放在网上,及时公布(找小助手完成)
关于实验报告的规范,虽然实验指导书上有,但还是有些问题,责任我,我写了一个报告规范,请大家审阅并通过,执行下去。
这节课的最好,我们来说这个报告规范。
上节课,我们学习了Form和其上的小元素,如StingItem,ImageItem,这次课我们继续研究小元素,TextField和ChoiceGroup
上节课,我们学习了屏显的切换,这节课,我们来看看一个屏显的数据如何传到另外一个屏显上呢?
最后,我们再研究Form上小元素的状态的侦听,这种侦听基本上是针对输入框的,比如说输入的内容不同就会做出相应的反应等。
教学目标:
1掌握小元素TextField和ChoiceGroup的使用
2掌握不同屏显数据的传输
3初步认识小元素状态的侦听
教学注意:
上完课之后,告诉同学怎么看书,看书中哪些内容
一.综合举例:
小小计算器
1要求内容如图
2分析
(1)这肯定用到了Form屏显,有一个菜单用于计算,里面有三个TextField和一个ChoiceGroup。
(2)本题的交互应该比较简单,只是菜单侦听整个屏显就可以了,不有侦听子项,也不用侦听子项状态的变化。
也就是用CommandListener
(3)文本框内容的提取和写入方法:
getString()setString
例如:
firstTextField.getString()rusultTextField.setString(“5.0”);
但取出的时候是字符串,要用将它们转换成数才可以运算。
需要使用Double这个类的toString方法
数转成字符串:
restltStr=Double.toString(result);
字符串转成数:
result=Double.parseDouble(resultStr)
补充知识:
(1)关于TextField的构造方法
TextField(String label,String text,int maxSize,int constraints)
newTextField("first","",10,TextField.DECIMAL);
DECIMAL:
指小数
NUMBER指整数
ANY指任意的数
PASSWORD指密码
(2)关于ChoiceGroup的构造方法
ChoiceGroup(label, choiceType,stringElements,imageElements)
newChoiceGroup("sign",ChoiceGroup.POPUP,newString[]{"add","sub","mul","div"},null);
友情提示:
上面两个小元素的构造方法几乎与TextBox,List的构造函数一样。
3类图结构
4核心代码
publicvoidcommandAction(Commandc,Displayabled){
doubleresult=0;
if(c==calcCommand){
try{
switch(signChoiceGroup.getSelectedIndex()){
case0:
result=Double.parseDouble(firstTextField.getString())+Double.parseDouble(secondTextField.getString());
break;
case1:
result=Double.parseDouble(firstTextField.getString())/Double.parseDouble(secondTextField.getString());
break;
}
StringresultString=Double.toString(result);
resultTextField.setString(resultString);
}
catch(IllegalArgumentExceptione){
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
return;
}
}
}
二.数据的传递
1界面
2分析
一个屏,两个屏显,其中还有一个菜单和小元素
3类图结构
根据上面的分析,似乎很容易得到类图结构,如下:
但这里有个大问题,新的屏显,不能急于产生,因为产生的时候,我们想把数据发送过去,也就说是newForm的产生应该是这样的:
newForm=newForm(“newForm”,name,tel)就好了。
但Form的构造函数,并没有这样的格式,怎么办?
解决办法:
从Form里产生一个子类newForm来完成这样的任务。
我们构造的新的类内容如下:
publicclassNewFormextendsForm{
privateTextFieldnameTextField=newTextField("name","",8,TextField.ANY);
privateTextFieldtelTextField=newTextField("tel","",18,TextField.PHONENUMBER);
publicNewForm(Stringtitle,Stringname,Stringtel){
super(title);
nameTextField.setString(name);
telTextField.setString(tel);
this.append(nameTextField);
this.append(telTextField);
}
}
正确的类图结构如下:
三.侦听小元素内容、状态的改变
1侦听三步曲:
(1)侦听接口
(2)安装侦听器
(3)侦听后动作
2已学过的侦听
完成对屏显和FORM屏显上的小元素的命令侦听,也就是说当我们点击一个“命令”时候,就可以侦听到附加命令的“屏显”或者“小元素”,说白了,就是知道你点了哪个“屏显”或者“小元素”。
问题:
我们不点命令,能不能侦听到Form上的小元素发生变化呢?
这种要求不过份。
3侦听小元素内容、状态的改变
(1)接口
ItemStateListener
(2)侦听
屏显(Form).setItemStatelistener(this)
(3)交互
publicvoiditemStateChanged(Itemitem){
if(item==item1){}
elseif(item==item2){}
else{}
}
举例:
小元素TextField构造函数
TextFieldname=newTextField("name","",8,TextField.ANY);
侦听动作如下:
publicvoiditemStateChanged(Itemitem)
{
if(item==name)
{
summary.setString("输入的姓名为:
"+name.getString());
}
elseif(item==tel)
{
summary.setString("输入的电话为:
"+tel.getString());
}
else
summary.setString("");
}
四.简单案例
1功能介绍
2程序代码
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Form;
importjavax.microedition.lcdui.Item;
importjavax.microedition.lcdui.ItemCommandListener;
importjavax.microedition.lcdui.ItemStateListener;
importjavax.microedition.lcdui.TextField;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassMIDletItemCommmandListenerextendsMIDletimplementsItemCommandListener,CommandListener,ItemStateListener{
privateFormfrm=newForm("Item监听器");
privateTextFielduid=newTextField("用户名","",20,TextField.ANY);
privateTextFieldpwd=newTextField("密码","",20,TextField.PASSWORD);
privateDisplaydis=Display.getDisplay(this);
privateCommandDel=newCommand("删除",Command.ITEM,1);
publicMIDletItemCommmandListener(){
}
protectedvoidstartApp()throwsMIDletStateChangeException{
frm.append(uid);
uid.addCommand(Del);
pwd.addCommand(Del);
pwd.setItemCommandListener(this);
uid.setItemCommandListener(this);
frm.append(pwd);
dis.setCurrent(frm);
dis.setCurrentItem(pwd);//得到焦点
frm.setItemStateListener(this);
}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
}
protectedvoidpauseApp(){
}
publicvoidcommandAction(Commandc,Itemi){
if(c==Del)
{
TextFieldtf=(TextField)i;
intp=tf.getCaretPosition();
if(p>0)
{
tf.delete(p-1,1);
}
}
}
publicvoidcommandAction(Commandc,Displayabled){
}
publicvoiditemStateChanged(Itemi){
if(i==uid)
{
frm.setTitle("用户名"+uid.getString());
}elseif(i==pwd)
{
frm.setTitle("密码"+uid.getString());
}
}
}
板书设计
小元素状态的改变的侦听
1接口ItemStateListener
2侦听setItemStateListener()
3动作itemStateChanged()
举例:
动态地显示输入的内容
分析:
(1)小元素TextField构造函数
TextFieldname=newTextField("name","",8,TextField.ANY);
(2)name.getString()
(3)summary.setString(name.getString())
举例:
计算器
分析:
(1)关于ChoiceGroup的构造方法
ChoiceGroup(label, choiceType,stringElements,imageElements)
newChoiceGroup("sign",ChoiceGroup.POPUP,newString[]{"add","sub","mul","div"},null);
(2)数转成字符串:
restltStr=Double.toString(result);
字符串转成数:
result=Double.parseDouble(resultStr)
(3)异常处理
catch(IllegalArgumentExceptione){
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}