为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

翻译软件代码

2010-04-30 28页 pdf 550KB 41阅读

用户头像

is_028481

暂无简介

举报
翻译软件代码 J2ME 英汉翻译软件设计与实现 Han Keyi 2006 年 5 月 30 日 kyehan@126.com 目 录 第 1 章 综合介绍 ................................................................................................................................1 1.1 功能 ................................
翻译软件代码
J2ME 英汉翻译软件与实现 Han Keyi 2006 年 5 月 30 日 kyehan@126.com 目 录 第 1 章 综合介绍 ................................................................................................................................1 1.1 功能 .......................................................................................................................................2 1.2 界面 .......................................................................................................................................2 第 2 章 类的设计 ................................................................................................................................4 2.1 主类 TranslaterMIDlet extends MIDlet.................................................................................4 2.2 帮助界面 HelpScreen extends Form .....................................................................................4 2.3 主界面 MainScreen extends Canvas .....................................................................................5 2.4 查询单词 QueryWord............................................................................................................5 2.5 查看所有单词 ViewWord .....................................................................................................6 第 3 章 程序实现 ................................................................................................................................7 3.1 MainScreen .............................................................................................................................7 3.1.1 paint( )..........................................................................................................................7 3.1.2 showResult( ) ...............................................................................................................7 3.1.3 keyPressed( ) ................................................................................................................7 3.1.4 changeChar( )...............................................................................................................8 3.1.5 appendChar( )...............................................................................................................8 3.2 QueryWord..............................................................................................................................9 3.2.1 getResult( )...................................................................................................................9 3.2.2 getWordBuffer( ) ..........................................................................................................9 第 4 章 程序代码 ..............................................................................................................................10 4.1 TranslaterMIDlet.java ...........................................................................................................10 4.2 MainScreen.java....................................................................................................................11 4.3 HelpScreen.java ....................................................................................................................20 4.4 QueryWord.java ....................................................................................................................21 4.5 ViewWord.java......................................................................................................................25 J2ME 编写英汉翻译软件 1 第 1 章 综合介绍 现在手机的功能已经越来越多了,至少我的 Nokia 6030 手机目前已经取代了 我的手表、收音机、文曲星、记事本等。通过下载各种 Java 软件,手机的功能还 在不断增加,游戏机是最重要的功能了,呵呵。 这里介绍一个 Java 编写的英汉翻译软件,通过从事先写好的 txt 文件查找翻 译结果。可以更改 txt 的内容来建立属于自己专属的单词库,对于经常使用生辟 单词的专业领域人士具有重大的意义,是成功人士、三好学生、贤妻良母必备软 件。 J2ME 编写英汉翻译软件 2 1.1 功能 主要功能当然是查单词的汉语解释,另外根据我个人的需要,又增加了查看 所有单词的功能,这样平时可以拿出来背背单词,丰富业余生活(假话)。 根据本软件的设计,键盘输入与通常的输入方法有一些小小的不同,重复按 键,则在屏幕上显示不断变化的字母,如果要输入同一个键上的另一个字母,就 需要按*键,再按数字键调整。比如单词 bag,首先按数字键 2 输入 b,接着按* 键重复输入 b,最后按数字键 2 调整为 a,再按数字键 4 输入 g 就可以了。 *键重复从附输入上一个字母,#键删除上一个字母。数字键 1 开始翻译。 1.2 界面 为了加深印象,用模拟器上的图片和实际手机的截图作了对比。首先是游戏 选择菜单: 进入软件后就会显示主界面,在输入框输入单词,按数字键 1 就可以从 txt 文件里查找结果。下图显示了查询两种结果: J2ME 编写英汉翻译软件 3 选择“查看”命令,可以查看当前输入框单词首字母的所有单词: J2ME 编写英汉翻译软件 4 第 2 章 类的设计 2.1 主类 TranslaterMIDlet extends MIDlet 这是软件的起始点,MIDlet 的生命周期都定义在这里了。 2.2 帮助界面 HelpScreen extends Form 指示显示软件的帮助文档,简单的一个类。Form 上加一个 StringItem 类的实 例。 J2ME 编写英汉翻译软件 5 2.3 主界面 MainScreen extends Canvas 软件的主要显示部分都在这里实现。包括按键事件的处理和画面的显示等。 2.4 查询单词 QueryWord 对 txt 文件的操作在这里实现,就是匹配单词的算法有些消耗脑细胞。 J2ME 编写英汉翻译软件 6 2.5 查看所有单词 ViewWord 通过调用 QueryWord 类的方法,将某一类的单词显示出来。 J2ME 编写英汉翻译软件 7 第 3 章 程序实现 主要说明一下 MainScreen 和 QueryWord 两个类的方法实现。整个软件里的 算法几乎都在这两个类里实现的。 3.1 MainScreen 3.1.1 paint( ) 在 paint( )中用 Graphics 的实例 g 依照不同的 y 坐标画出字符串和矩形。将输 入的字符串 y 坐标设为在矩形方框中间,模仿文本输入框的效果: g.drawString("请输入单词:",0,0,g.TOP|g.LEFT); g.drawRect(BORDER,tempHeight+BORDER,this.getWidth()-BORDER*2,temp Height+BORDER); g.drawString(inputText.toString(),BORDER*2,tempHeight+BORDER+BORDER /2,g.TOP|g.LEFT); showResult(tempHeight*2+BORDER*3,g); 3.1.2 showResult( ) 将查询后的结果分行显示在矩形框的下方。这里通过判断结果字符串中如果 有空个,则在新的一行显示。 if(queryResult.length()!=0){ if(queryResult.toString().equals(" 未找到单词。")){ queryResult.append(inputText.toString()); } for (int i = 0; i < queryResult.length(); i++) { if(queryResult.charAt(i)==' '){ offset=i; length=this.getLength(queryResult,offset); //两个空个之间字符的长度 g.drawSubstring(queryResult.toString(),offset,length,x,y,g.TOP|g.LEFT); y+=(g.getFont()).getHeight(); //另起一行的 y 坐标增加值 } }//end for }//end if 3.1.3 keyPressed( ) 处理键盘输入的事件。用 switch( )针对不同按键值和上一次按键值分别调用 changeChar()或 appendChar ( )方法。例如: case Canvas.KEY_NUM2: if(oldKey==Canvas.KEY_NUM2){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ J2ME 编写英汉翻译软件 8 oldKey=Canvas.KEY_NUM2; appendChar(oldKey); } } break; 3.1.4 changeChar( ) 按键重复按下时,依次将同一个数字键上的字母变化。如重复按数字键 2, 则文本输入的字母依次变化为 a、b、c。也是使用 switch( )处理。 case Canvas.KEY_NUM2: if((inputText.charAt(inputText.length()-1))=='a'){ inputText.setLength(inputText.length()-1); inputText.append('b'); } else if((inputText.charAt(inputText.length()-1))=='b'){ inputText.setLength(inputText.length()-1); inputText.append('c'); } else if((inputText.charAt(inputText.length()-1))=='c'){ inputText.setLength(inputText.length()-1); inputText.append('a'); } break; 3.1.5 appendChar( ) 按下按键后输入字符串增加所输入的字母。 case Canvas.KEY_NUM2: inputText.append('a'); break; 对于*键的处理有一些复杂,重复数一个字母,同时将表示原来按键的变量赋 值: case Canvas.KEY_STAR: char c = inputText.charAt(inputText.length()-1); inputText.append(c); switch(c){ case 'a': case 'b': case 'c': oldKey=Canvas.KEY_NUM2; break; //其它代码略 } break; J2ME 编写英汉翻译软件 9 3.2 QueryWord 定义了两个方法,getResult 返回查询单词的汉语解释,getWordBuffer 返回分 类的所有单词。 3.2.1 getResult( ) 将主界面输入文本框的字符串作为参数,传入 getResult (StringBuffer word), 这个方法返回 StringBuffer 类型的返回值。 用 getWordsFile(word)取的 TXT 文件的数据,通过比较查找匹配的单词字符 串。flag 表示所查找的单词每一个字母的位置,length 表示 TXT 文件中数据匹配 时的长度,如果没有 length 这个标志,会发生匹配不准确的错误,例如查询 by, 会匹配到 baby 上面。 if(ch=='\n'){ length=0; } else{ length++; } if(flag0){ QueryWord query=new QueryWord(); queryResult=query.getResult(inputText); } break; case Canvas.KEY_NUM2: if(oldKey==Canvas.KEY_NUM2){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM2; appendChar(oldKey); } } break; case Canvas.KEY_NUM3: if(oldKey==Canvas.KEY_NUM3){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM3; appendChar(oldKey); } } break; case Canvas.KEY_NUM4: if(oldKey==Canvas.KEY_NUM4){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM4; appendChar(oldKey); } } break; J2ME 编写英汉翻译软件 13 case Canvas.KEY_NUM5: if(oldKey==Canvas.KEY_NUM5){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM5; appendChar(oldKey); } } break; case Canvas.KEY_NUM6: if(oldKey==Canvas.KEY_NUM6){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM6; appendChar(oldKey); } } break; case Canvas.KEY_NUM7: if(oldKey==Canvas.KEY_NUM7){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM7; appendChar(oldKey); } } break; case Canvas.KEY_NUM8: if(oldKey==Canvas.KEY_NUM8){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM8; appendChar(oldKey); } } break; J2ME 编写英汉翻译软件 14 case Canvas.KEY_NUM9: if(oldKey==Canvas.KEY_NUM9){ changeChar(oldKey); } else{ if(inputText.length()<=MAX_CHAR){ oldKey=Canvas.KEY_NUM9; appendChar(oldKey); } } break; case Canvas.KEY_STAR://repeat input if(inputText.length()<=MAX_CHAR && inputText.length()>0){ oldKey=Canvas.KEY_STAR; appendChar(oldKey); } break; case Canvas.KEY_POUND://delete input if(inputText.length()>0){ oldKey=Canvas.KEY_POUND; appendChar(oldKey); } break; } repaint(); } private void showResult(int height, Graphics g){ int y=height; int x=BORDER*2; int offset=0; int length=0; /*if(queryResult.toString().equals(" 未找到单词。")){ queryResult.append(inputText.toString()); //g.drawString(queryResult.toString(),x,y,g.TOP|g.LEFT); } /*else if(queryResult.toString().equals("请输入要察看的单词!")){ g.drawString(queryResult.toString(),x,y,g.TOP|g.LEFT); }*/ if(queryResult.length()!=0){ if(queryResult.toString().equals(" 未找到单词。")){ queryResult.append(inputText.toString()); } for (int i = 0; i < queryResult.length(); i++) { J2ME 编写英汉翻译软件 15 if(queryResult.charAt(i)==' '){ offset=i; length=this.getLength(queryResult,offset); g.drawSubstring(queryResult.toString(),offset,length,x,y,g.TOP|g.LEFT); y+=(g.getFont()).getHeight(); } }//end for }//end if } private int getLength(StringBuffer s,int offset){ int length=0; for (int i = offset+1; i < s.length(); i++) { if(s.charAt(i)==' '){ length=i-offset; break; } } if(length==0){ length=s.length()-offset; } return length; } private void changeChar(int key){ switch(key){ case Canvas.KEY_NUM2: if((inputText.charAt(inputText.length()-1))=='a'){ inputText.setLength(inputText.length()-1); inputText.append('b'); } else if((inputText.charAt(inputText.length()-1))=='b'){ inputText.setLength(inputText.length()-1); inputText.append('c'); } else if((inputText.charAt(inputText.length()-1))=='c'){ inputText.setLength(inputText.length()-1); inputText.append('a'); } break; case Canvas.KEY_NUM3: if((inputText.charAt(inputText.length()-1))=='d'){ inputText.setLength(inputText.length()-1); inputText.append('e'); J2ME 编写英汉翻译软件 16 } else if((inputText.charAt(inputText.length()-1))=='e'){ inputText.setLength(inputText.length()-1); inputText.append('f'); } else if((inputText.charAt(inputText.length()-1))=='f'){ inputText.setLength(inputText.length()-1); inputText.append('d'); } break; case Canvas.KEY_NUM4: if((inputText.charAt(inputText.length()-1))=='g'){ inputText.setLength(inputText.length()-1); inputText.append('h'); } else if((inputText.charAt(inputText.length()-1))=='h'){ inputText.setLength(inputText.length()-1); inputText.append('i'); } else if((inputText.charAt(inputText.length()-1))=='i'){ inputText.setLength(inputText.length()-1); inputText.append('g'); } break; case Canvas.KEY_NUM5: if((inputText.charAt(inputText.length()-1))=='j'){ inputText.setLength(inputText.length()-1); inputText.append('k'); } else if((inputText.charAt(inputText.length()-1))=='k'){ inputText.setLength(inputText.length()-1); inputText.append('l'); } else if((inputText.charAt(inputText.length()-1))=='l'){ inputText.setLength(inputText.length()-1); inputText.append('j'); } break; case Canvas.KEY_NUM6: if((inputText.charAt(inputText.length()-1))=='m'){ inputText.setLength(inputText.length()-1); inputText.append('n'); } else if((inputText.charAt(inputText.length()-1))=='n'){ J2ME 编写英汉翻译软件 17 inputText.setLength(inputText.length()-1); inputText.append('o'); } else if((inputText.charAt(inputText.length()-1))=='o'){ inputText.setLength(inputText.length()-1); inputText.append('m'); } break; case Canvas.KEY_NUM7: if((inputText.charAt(inputText.length()-1))=='p'){ inputText.setLength(inputText.length()-1); inputText.append('q'); } else if((inputText.charAt(inputText.length()-1))=='q'){ inputText.setLength(inputText.length()-1); inputText.append('r'); } else if((inputText.charAt(inputText.length()-1))=='r'){ inputText.setLength(inputText.length()-1); inputText.append('s'); } else if((inputText.charAt(inputText.length()-1))=='s'){ inputText.setLength(inputText.length()-1); inputText.append('p'); } break; case Canvas.KEY_NUM8: if((inputText.charAt(inputText.length()-1))=='t'){ inputText.setLength(inputText.length()-1); inputText.append('u'); } else if((inputText.charAt(inputText.length()-1))=='u'){ inputText.setLength(inputText.length()-1); inputText.append('v'); } else if((inputText.charAt(inputText.length()-1))=='v'){ inputText.setLength(inputText.length()-1); inputText.append('t'); } break; case Canvas.KEY_NUM9: if((inputText.charAt(inputText.length()-1))=='w'){ inputText.setLength(inputText.length()-1); inputText.append('x'); J2ME 编写英汉翻译软件 18 } else if((inputText.charAt(inputText.length()-1))=='x'){ inputText.setLength(inputText.length()-1); inputText.append('y'); } else if((inputText.charAt(inputText.length()-1))=='y'){ inputText.setLength(inputText.length()-1); inputText.append('z'); } else if((inputText.charAt(inputText.length()-1))=='z'){ inputText.setLength(inputText.length()-1); inputText.append('w'); } break; } } private void appendChar(int key){ switch(key){ case Canvas.KEY_NUM2: inputText.append('a'); break; case Canvas.KEY_NUM3: inputText.append('d'); break; case Canvas.KEY_NUM4: inputText.append('g'); break; case Canvas.KEY_NUM5: inputText.append('j'); break; case Canvas.KEY_NUM6: inputText.append('m'); break; case Canvas.KEY_NUM7: inputText.append('p'); break; case Canvas.KEY_NUM8: inputText.append('t'); break; case Canvas.KEY_NUM9: inputText.append('w'); break; case Canvas.KEY_POUND: inputText.setLength(inputText.length()-1); J2ME 编写英汉翻译软件 19 break; case Canvas.KEY_STAR: char c = inputTex
/
本文档为【翻译软件代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索