canvas汉字输入类库

来源:互联网 发布:本地网络出现波动 编辑:程序博客网 时间:2024/05/22 18:22

和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();
        }
    }
}

 汉字输入类库

 下载信息 图片点击可在新窗口打开查看[点击浏览该文件:] | 图片点击可在新窗口打开查看[快车下载]

演示程序

 

 下载信息 图片点击可在新窗口打开查看[点击浏览该文件:] | 图片点击可在新窗口打开查看[快车下载]

类库源代码


   下载信息 图片点击可在新窗口打开查看[点击浏览该文件:] | 图片点击可在新窗口打开查看[快车下载]  

原创粉丝点击