j2me笑话浏览实验报告.docx
- 文档编号:9248490
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:47
- 大小:572.51KB
j2me笑话浏览实验报告.docx
《j2me笑话浏览实验报告.docx》由会员分享,可在线阅读,更多相关《j2me笑话浏览实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
j2me笑话浏览实验报告
笑话浏览
1.实验名称
项目名称:
笑话浏览
2.实验目标
笑话阅读,搜索与好友分享
(1)掌握State框架原理和使用
(2)掌握Graphics,Font,Image知识点
(3)了解通过流方式读取文件里数据
(4)了解长字符串换行
(5)了解j2me发送短信的机制
(6)掌握高级界面的使用方法
3.项目步骤
3.1任务1:
导入工程文件
(1)File—Import—General—Existingprojectsintoworkspace—Select
(2)各个类的作用如下:
iCom.ldci.game.midlet.Midlet:
整个工程的入口类
iicom.ldci.game.Frame.Main:
主Canvas界面类
iiicom.ldci.game.Frame.Scene:
各界面实现的方法接口
ivcom.ldci.game.state.Menu:
主菜单类
vcom.ldci.game.state.Read:
阅读界面类
vimon.Const:
常用数据类
viimon.GameCommon:
常用公共方法类
viiicom.ldci.game.sms.SendSmsListener:
发送短信监听接口
ixcom.ldci.game.sms.SendSmsThread:
发送短信逻辑处理类
xcom.ldci.game.sms.SmsView:
发送短信界面类
xicom.ldci.game.state.Search:
搜索界面类
xiicom.ldci.game.state.Option:
设置阅读模式界面类
3.2任务2:
完成接口com.ldci.game.Frame.Scene
3.2.1任务目的
(1)掌握接口使用法
(2)声明场景类中用到的方法,供场景类实现
3.2.2任务描述
在com.ldci.game.Frame包中的Scene接口里声明方法
//声明方法
publicvoidpaint(Graphicsg);
publicvoidkeyPressed(intkeyCode);
publicvoidkeyReleased(intkeyCode);
publicvoidlogic();
3.3任务3:
完成主Canvas界面类com.ldci.game.Frame.Main
3.3.1任务目的
(1)掌握静态对象调用方法
(2)掌握状态调用的原理
(3)实现Canvas界面类
3.3.2实现代码
packagecom.ldci.game.Frame;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importcom.ldci.game.state.Menu;
publicclassMainextendsCanvasimplementsRunnable{
//定义一个静态Scene对象sceneState调用状态
publicstaticScenesceneState=null;//状态设置
publicstaticMaincanvas=null;//canvas对象
Threadt=null;
publicMain(){
try{
canvas=this;//本类对象
this.setFullScreenMode(true);//设置全屏
//创建Menu类对象
Menumenu=newMenu();
//menu设置成当前界面
sceneState=menu;
t=newThread(this);
t.start();
}catch(Exceptione){
e.printStackTrace();
}
}
protectedvoidpaint(Graphicsg){
try{
//通过sceneState显示当前状态里的paint()方法
sceneState.paint(g);
}catch(Exceptione){
e.printStackTrace();
}
}
protectedvoidkeyPressed(intkeyCode){
try{
//通过sceneState调用当前显示状态的keyPressed方法
sceneState.keyPressed(keyCode);
}catch(Exceptione){
e.printStackTrace();
}
}
protectedvoidkeyReleased(intkeyCode){
try{
//通过sceneState调用当前显示状态的keyReleased方法
sceneState.keyReleased(keyCode);
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidlogic(){
//调用当前显示状态的logic方法
sceneState.logic();
}
publicvoidrun(){
try{
while(true){
logic();
Thread.sleep(100);
repaint();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
3.4任务4:
完成常用量类mon.Const
3.4.2任务目的
(1)掌握Const类使用
(2)定义屏幕分辨率的宽度
(3)申明按键值,按照机型的键值定义
(4)声明字体设置,把项目中所要用到的字体定义,高度通过定义字体来获得
(5)申明图片路径
(6)申明菜单状态
3.4.1实现代码
packagemon;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.DataInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Vector;
importjavax.microedition.lcdui.Font;
importjavax.microedition.lcdui.Graphics;
importcom.ldci.game.midlet.Midlet;
publicclassConst{
/**
*屏幕分辨率
*/
publicstaticfinalintscreenWidth=240;//屏幕宽度
publicstaticfinalintscreenHeight=310;//屏幕高度
/**
*按键键值
*/
publicstaticfinalintKEY_UP=-1;//方向键上键
publicstaticfinalintKEY_DOWN=-2;//方向键下键
publicstaticfinalintKEY_LEFT=-3;//方向键左键
publicstaticfinalintKEY_RIGHT=-4;//方向键右键
publicstaticfinalintKEY_OK=-5;//中间键
publicstaticfinalintKEY_SOFT_LEFT=-6;//左软键
publicstaticfinalintKEY_SOFT_RIGHT=-7;//右软键
/**
*字体设置
*/
//定义小系统字体
publicstaticFontsmallFont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL);
publicstaticintfontHeight=smallFont.getHeight();
publicstaticintspace=10;
/**
*菜单状态
*/
publicstaticfinalintSTATE_MENU=6;
publicstaticfinalintSTATE_READ=0;
publicstaticfinalintSTATE_SEARCH=1;
publicstaticfinalintSTATE_OPTION=2;
publicstaticfinalintSTATE_HELP=3;
publicstaticfinalintSTATE_ABOUT=4;
publicstaticfinalintSTATE_EXIT=5;
/**
*图片路径数组
*/
publicstaticString[]resource={
"/beijing1.png",//0
"/beijing2.png",//1
"/beijing3.png",//2
"/beijing4.png",//3
"/xiaohua.png",//4
"/read.png",//5
"/sousuo.png",//6
"/option.png",//7
"/help.png",//8
"/about.png",//9
"/exit.png",//10
"/arrowUp.png",//11
"/arrowDown.png",//12
"/arrowLeft.png",//13
"/arrowRight.png"//14
};
/**
*菜单文字数组
*/
publicstaticString[]menuStr={
"阅读",
"搜索",
"设置",
};
/**
*阅读笑话类型文字数组
*/
publicstaticString[]readTypeStr={
"名人","幽默","动物"
};
/**
*阅读模式文字数组
*/
publicstaticString[]readModeStr={
"白天模式","夜晚模式"
}
}
3.5任务5:
完成常用方法mon.GameCommon
3.5.1任务目的
(1)GameCommon类属于工具类,掌握其使用
(2)类中有清屏方法、读取文本数据方法(加载笑话文本)、文本换行方法、画左右软键的方法。
3.5.2实现代码
packagemon;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.DataInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Vector;
importjavax.microedition.lcdui.Font;
importjavax.microedition.lcdui.Graphics;
importcom.ldci.game.Frame.Main;
importcom.ldci.game.midlet.Midlet;
importcom.ldci.game.state.Menu;
importcom.ldci.game.state.Option;
publicclassGameCommon{
/**
*清屏
*/
publicstaticvoidclean(Graphicsg){
g.setColor(0xffffff);
g.fillRect(0,0,Const.screenWidth,Const.screenHeight);
}
/**
*加载笑话文本
*/
publicstaticString[]loadText(){
String[]result=newString[8];
InputStreamis=null;
try{
is=Midlet.instance.getClass().getResourceAsStream("/xiaohua.txt");
//readLine(is);
for(inti=0;i result[i]=readLine(is); //System.out.println("Index["+i+"]: "+result[i]); } }catch(Exceptione){ System.out.println("thereisaerrorwhenloadtext: "+e.toString()); }finally{ try{ is.close(); is=null; }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returnresult; } publicstaticStringreadLine(InputStreamis)throwsIOException{ try{ byte[]data; Stringstr; intb; ByteArrayOutputStreambaos; baos=newByteArrayOutputStream(); b=0; while((b=is.read())! =-1){ if(b==10){ break; } if(b! =13){ baos.write(b); } } baos.close(); data=baos.toByteArray(); if(data.length>0){ str=convertFromUTF8(data); } elseif(b! =-1){ str=""; } else{ str=null; } baos=null; returnstr; } catch(Exceptione){ return"x"; } } publicstaticStringconvertFromUTF8(byte[]data){ if(data==null){ returnnull; } try{ intlen=data.length; byte[]newdata=newbyte[len+2]; newdata[0]=(byte)(len>>>8); newdata[1]=(byte)len; System.arraycopy(data,0,newdata,2,len); ByteArrayInputStreambis=newByteArrayInputStream(newdata); DataInputStreamdis=newDataInputStream(bis); returndis.readUTF(); } catch(Exceptione){ e.printStackTrace(); returnnull; } } /** *文本换行 */ publicstaticfinalString[]changeToArrayCn(Stringstr,Fontfont,intwidth){ intnowWidth=0; Vectorresult=newVector(); StringBufferbuffer=newStringBuffer(); for(inti=0;i charch=str.charAt(i); intchWidth=font.charWidth(ch); if(ch=='['||ch==']'||ch=='~'||ch=='^'||ch=='\r') chWidth=0; if(ch=='^'||ch=='\r'||ch=='|'){ result.addElement(buffer.toString()); buffer=newStringBuffer(); nowWidth=0; continue; } nowWidth+=chWidth; if(nowWidth>=width){ if(! isSign(ch)){ result.addElement(buffer.toString()); buffer=newStringBuffer(); nowWidth=chWidth; } } buffer.append(ch); } if(buffer.length()>0) result.addElement(buffer.toString()); String[]s=newString[result.size()]; for(inti=0;i s[i]=(String)result.elementAt(i); if(s[i].charAt(0)=='\n') s[i]=s[i].substring (1); //System.out.println(i+": "+s[i]); } returns; } privatestaticfinalchar[]SIGN_ALL={': ',',','.','? ','! ','',';',//English '\uFF0C','\u3002','\uFF1F','\uFF01','\uFF1B','\u3001'//Chinese }; privatestaticfinalbooleanisSign(charch){ for(inti=SIGN_ALL.length-1;i>=0;i--){ if(ch==SIGN_ALL[i]){ returntrue; } } returnfalse; } /* *画左右软键 */ publicstaticvoiddrawSoftButton(Graphicsg,Stringlstr,Stringrstr){ if(Menu.menuIndex==Const.STATE_READ&&Option.isReadMode==true){ g.setColor(0xffffff); }else{ g.setColor(0); } if(lstr! =null){ g.drawString(lstr,0,Const.screenHeight,Graphics.LEFT|Graphics.BOTTOM); } if(rstr! =null) { g.drawString(rstr,Const.screenWidth,Const.screenHeight,Graphics.RIGHT|Graphics.BOTTOM); } } } 3.6任务6: 完成菜单界面类com.ldic.game.state.Menu 3.6.1任务目的 (1)掌握Graphics画笔的使用 (2)掌握按键的处理方法 (3)Menu类里的paint()方法中,画背景,先清屏然后绘制背景图片 (4)Menu类里的paint()方法中添加绘制菜单 (5)Menu类里的keypressed()方法中增加按键选择菜单功能,处理向上按键的功能 (6)Menu类里的keyPressed()方法中增加按键选择菜单功能,处理向下按键的功能 (7)Menu类里的keyPressed()方法中增加按键选择菜单功能,处理中间键、左软键的功能 (8)Menu类里的keypressed()方法中增加按键退出程序功能,处理右软键 4.6.2实现代码 /** *清屏并绘制背景图片 */ packagecom.ldci.game.state; importjavax.microedition.lcdui.Graphics; importjavax.microedition.lcdui.Image; importcom.ldci.game.Frame.Main; importcom.ldci.game.Frame.Scene; importmon.Const; importmon.GameCommon; importcom.ldci.game.midlet.Mid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- j2me 笑话 浏览 实验 报告