和J2ME认识快2年了,觉得大多时间都没在J2ME上。我是个本科学生,平时喜欢没事无聊写程序玩,不在乎做出的游戏有啥好玩的,就是想享受写程序的乐趣,学点新东西。
大二我们班组了个创新团队,做的手机游戏对战平台在东软杯上还拿了奖。挺开心
在做游戏过程中,我发现每当要输入字符,界面就会跳转到系统给的输入框里来(在模拟器上能直接输),后来用canvas做游戏时,发现不能插入输入框。于是我就想写个输入法,能在canvas上直接输入字符。这样只要在canvas上按一堆数字键就能输出字符了。
我把这个汉字输入法连同一个" Java手机日记本"上交学院参加院庆杯,很失望,连个鼓励都没有。。。。。
现在分享给大家,希望大家能有用的上的。对输入法有建议,请跟贴告诉我,谢谢!!!
主要API介绍
1、util.hzpy.HanziInput
汉字拼音输入法类,通过这个类能够识别键盘输入,获取用户需要的汉字。
void back()
退格
char getCurrent_hanzi()
获得当前选中的汉字
java.lang.StringBuffer getCurrent_pinyin()
返回当前拼音序列
char[] getHanziSequence()
获得当前汉字序列
int getInput_state()
获得当前输入法的状态,用来判断是否可以输出
tatic HanziInput getInstance()
获得拼音输入法的实例
java.lang.StringBuffer getPinyinSequence()
获得当前拼音序列
void init()
初始化输入法
void nextKeycode(int keycode)
加入一个新的按键消息
void updateView(javax.microedition.lcdui.Graphics graphics, int width, int height, javax.microedition.lcdui.Font font)
更新输入法画面,在屏幕底部显示输入法内容
2、util.hzpy.HanyuPinyin
汉字字库,每组汉字由对应的汉语拼音索引
static char[] getHanziSequence(java.lang.StringBuffer pinyin)
根据拼音获取汉字序列
四、输入法应用示例
/*
* EditCanvas.java
* 汉字编辑
*
* Created on 2007年6月9日, 下午5:30
*
*/
package src;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import util.hzpy.HanziInput;
/**
*
* @version 1.0
* @author 碳酸钙
*/
public class EditCanvas extends Canvas{
//输入法
HanziInput input;
//显示
Font font;
int width,height;
//文本
StringBuffer text;
public EditCanvas() {
width= getWidth();
height = getHeight();
//获得输入法
input = HanziInput.getInstance();
text = new StringBuffer();
//绘制
font= Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);
}
protected void paint(Graphics graphics) {
/*设置输入法绘画区域*/
graphics.setClip(0,0,
width,height);
graphics.setColor(0xffffff);
//清屏
graphics.fillRect(0,
0,
width,height);
graphics.setColor(0);
if(text != null && text.length() > 0){
int width_per_char = font.charWidth('爱');//设置汉字的宽
int len_per_line = width/width_per_char;
int offset = 0;
int length = len_per_line;
int height_of_text_write = 0;
char[] hanzis = new char[text.length()];
text.getChars(0,text.length(),hanzis,0);
if(length > hanzis.length) length = hanzis.length;
while(offset <= text.length() ){
//挨个输出text里的汉字
graphics.drawChars(hanzis,
offset,length,
0,height_of_text_write,
Graphics.TOP|Graphics.LEFT);
offset += len_per_line;
height_of_text_write += font.getHeight();
if(offset+len_per_line > text.length())length = text.length() - offset;
else length = len_per_line;
}
}
//绘制输入法界面
if(input.getInput_state() > 2){
//有输入法有更新
input.updateView(graphics,width,height,font);
}
}
public void keyPressed(int keycode){
System.out.println("keycode=" + keycode);
if(keycode == -5 || keycode == 48){ //确定
if(input.getInput_state() > 1){
//获得输入法中的选中的汉字
text.append(input.getCurrent_hanzi());
//重置输入法
input.init();
}
}else{
input.nextKeycode(keycode);
}
repaint();
}
//退格
public void back() {
if(input.getInput_state() > 1){
input.back();
repaint();
}else{
if(text.length() > 0)
text.setLength(text.length()-1);
repaint();
}
}
}
汉字输入类库
下载信息 |
[点击浏览该文件:] | [快车下载] |
演示程序
下载信息 |
[点击浏览该文件:] | [快车下载] |
类库源代码
下载信息 |
[点击浏览该文件:] | [快车下载] |