移动终端汉语拼音输入法及本地搜索接口实现技术 第7页
图4-2 InputEdit类、CutString类的类图本模块实现的核心代码包括InputEdit类中的InputEdit函数和CutString类中drawCutString函数,InputEdit函数主要实现对输入法用户界面的编辑。其核心代码如下:
public InputEdit() {
font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
fontWidth = (byte)font.charWidth(CHAR);
fontHeight = fontWidth;//(byte)font.getHeight();
letterWidth = (byte)font.charWidth(LETTER);
curSpells = new StringBuffer();
selectedSpell = new StringBuffer();
inputedChars = new StringBuffer();
cutString = new CutString();
editFrameCell = 2;
editModeWidth = fontWidth + 16;
inputStatus = STATUS_SPELL;
init();
drawCutString函数主要实现光标的绘制,其核心代码如下:
public int drawCutString(Graphics graphic,String str,int x,int y,int width,int height,boolean isShowEditBG){
if(str != null){
if(str.hashCode() != oldHashcode){
initStatus();
oldCilpX = graphic.getClipX();
oldCilpY = graphic.getClipY();
oldCilpWidth = graphic.getClipWidth();
oldCilpHeight = graphic.getClipHeight();
oldFont = graphic.getFont();
maxCanvasWidth = width - 6;
maxCanvasHeight = height;
for(int i = 0;i < str.length();i++){
sb.append(str.charAt(i));
if(font.stringWidth(sb.toString()) > maxCanvasWidth - fontWidth){
textVector.addElement(sb.toString());
sb.delete(0, sb.length());
}else if(str.length() - 1 == i){
textVector.addElement(sb.toString());
}
}
rowCount = textVector.size();
if(oldStrLength != str.length()){
if(oldStrLength > str.length()){
decCursorIndex();
}else{
addCursorIndex();
}
oldStrLength = str.length();
}
isMoreThanCanvas();
oldHashcode = str.hashCode();
毕业论文
http://www.Lwfree.cn/+ 9, maxCanvasHeight + 2);
drawEditBG(graphic, x, y, isShowEditBG);
int count = 0;
for(int i =0;i < textVector.size();i++){
graphic.drawString(textVector.elementAt(i).toString(), x,
y + i * rowHeight - rightLineIndex * rowHeight, 0);
}
//绘制光标
cursorCount++;
graphic.setColor(0);
if(cursorCount % 6 == 0 && isShowCursor){
int _x = x;
if(textVector.size() > 0)
_x = x + font.stringWidth(textVector.elementAt(cursorH).toString().substring(0,cursorIndex));
graphic.drawLine(_x, y + (cursorH) * rowHeight - rightLineIndex * rowHeight, _x,
y + (cursorH) * rowHeight + fontWidth + 2 - rightLineIndex * rowHeight);
}
count = textVector.size();
drawRightLine(graphic, x, y);
graphic.setClip(oldCilpX, oldCilpY, oldCilpWidth, oldCilpHeight);
if(oldFont != null)
graphic.setFont(oldFont);
return count;
}
4.3 主控制模块
所有的J2ME程序都必须包含有一个继承自javax.microedition.midlet.MIDLet的类,作为整个程序的入口点。本输入法中,入口程序是MainMIDLet。它作为程序的主控类,文护程序的运行状态,为系统的初始化,启动,输入状态的改变等提供本文源自辣文论文网方法,其它的工作几乎不涉及。MainMIDLet类图如图4-3所示。
图4-3 MainMIDLet类图
4.4 本章小结
本章详细介绍了智能终端输入法的设计与实现。对输入法进行了详细的设计,分析了各模块构成,给出了部分关键代码的实现。
上一页 [1] [2] [3] [4] [5] [6] [7]
移动终端汉语拼音输入法及本地搜索接口实现技术 第7页下载如图片无法显示或论文不完整,请联系qq752018766