翻译软件代码
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(flag
0){
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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。