⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addwordscreen.java

📁 一個手機程序(電子詞典),一個不可多得的源碼程序,是學習J2ME的好東東.
💻 JAVA
字号:
package org.zblog.zenghelper.screen;

import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import org.zblog.zenghelper.util.Navigator;
import org.zblog.zenghelper.screen.sub.IsSenScreen;
import org.zblog.zenghelper.screen.sub.AddInfoScreen;
import org.zblog.zenghelper.screen.sub.SelectSymbolScreen;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import java.util.Vector;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Image;
import org.zblog.zenghelper.screen.sub.EnWordScreen;
import javax.microedition.lcdui.Alert;
import org.zblog.zenghelper.util.PublicRes;
import javax.microedition.lcdui.AlertType;
import org.zblog.zenghelper.dbtool.DbTool;

/**
 * <br><strong>Z英语学习助手-查看/添加/修改单词屏幕</strong><br>
 * <br>该屏幕是采用低级API来实现.主要包括:
 * <br>1.标题栏和分隔横线
 * <br>2.正文:单词,音标,生词,解释
 * <br>3.一个Back按钮用于返回主菜单
 * <br>4.其它Command:修改单词,修改音标,标记生词,添加解释,提交表单
 *
 * @author <a href="mailto:zcw@zblog.org">朱传伟</a><br>
 * <a href="http://www.zblog.org">www.zblog.org</a></p>
 * @version <strong>ZEnHelper</strong> Ver 1.0
 */
public class AddWordScreen extends Canvas implements CommandListener,Runnable{
    private static AddWordScreen aws=null;
    public PublicRes pr=PublicRes.getInstance();
    public int rsId=-1;
    public int groupId=-1;
    public int senId=-1;
    public Graphics gps=null;
    //以下变量主要用于上下滚动时使用,base表示当前应该跳过的行数,标题和横线除外
    public int base=0;
    public int step=1;
    /** 英文单词 */
    public String enWord=null;
    /** 音标  */
    public Vector ybs=null;
    /** 中文解释 */
    public Vector cnWords=null;
    /** 是否标记为生词 */
    public boolean sen=true;
    /** 相关命令 */
    private Command back=null;
    private Command updateEn=null;
    private Command updateYb=null;
    private Command updateSen=null;
    private Command updateCn=null;
    private Command addWord=null;

    private AddWordScreen() {
        enWord="";
        ybs=new Vector();
        cnWords=new Vector();
        back=new Command("返回",Command.BACK,1);
        updateEn=new Command("修改单词",Command.ITEM,1);
        updateYb=new Command("修改音标",Command.ITEM,2);
        updateSen=new Command("标记生词",Command.ITEM,3);
        updateCn=new Command("添加解释",Command.ITEM,4);
        addWord=new Command("提交表单",Command.ITEM,5);
        addCommand(back);
        addCommand(updateEn);
        addCommand(updateYb);
        addCommand(updateSen);
        addCommand(updateCn);
        addCommand(addWord);
        setCommandListener(this);
    }

    /**
     * 清除该对象的各种属性,将对象还原为初始状态,因为该类的对象采用static方式创建,所以
     * 有时需要将对象的属性还原为初始状态.
     */
    public void clear(){
        rsId=-1;
        groupId=-1;
        senId=-1;
        base=0;
        enWord="";
        cnWords.removeAllElements();
        ybs.removeAllElements();
        sen=true;
    }

    /**
     * 工厂方法,用于创建该类AddWordScreen的实例对象
     * @return AddWordScreen
     */
    public synchronized static AddWordScreen getInstance(){
        if(aws==null)
            aws=new AddWordScreen();
        else
            aws.clear();
        return aws;
    }

    /**
     * 该方法覆盖了父类中的keyPressed方法,用于捕获上,下键事件,以对屏幕进行上下滚动
     * @param keycode int
     */
    public void keyPressed(int keycode){
        //向上滚动
        if(keycode==-1){
            base=base-step;
            if(base<0)base=0;
        }
        //向下滚动
        else if(keycode==-2){
            base=base+step;
            //保证屏幕中至少显示4条解释
            // if(base>(cnWords.size()+4-4))base=cnWords.size()+4-4;
            if(base>cnWords.size())base=cnWords.size();
        }
        repaint();
    }

    /**
     * 实现paint方法,绘制屏幕图像
     * @param gp Graphics
     */
    protected void paint(Graphics gp) {
        gps=gp;
        int xx=gp.getClipWidth();
        int yy=gp.getClipHeight();
        //游动的y轴坐标
        int py=0;
        //固定的起始x轴坐标
        int px=3;
        //y轴间隔
        int ppy=1;
        //x轴间隔
        int ppx=2;
        //任意变量
        int ti=0;
        //清除屏幕
        gp.setColor(255,255,255);
        gp.fillRect(0,0,xx,yy);
        //绘制标题
        gp.setColor(0,0,123);
        Font fontBT=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);
        Font fontZW=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
        gp.setFont(fontBT);
        if(rsId==-1)
            gp.drawString("添加单词表单",5,3,Graphics.TOP | Graphics.LEFT);
        else
            gp.drawString("单词详细信息",5,3,Graphics.TOP | Graphics.LEFT);
        py=fontBT.getHeight()+3;
        gp.drawLine(0,py,xx,py);
        py=py+1;
        gp.setColor(88,168,255);
        gp.drawLine(0,py,xx,py);
        gp.setColor(0,0,123);
        //针对上下滚动的响应,现在开始计数
        int point=0;
        py=py+ppy;
        //绘制"单词"及内容
        char[]tcs="单词:".toCharArray();
        int twoL=fontBT.charsWidth(tcs,0,tcs.length);
        if(point>=base){
            gp.drawString("单词:",px,py,Graphics.TOP | Graphics.LEFT);
            ti=px+twoL+ppx;
            gp.setFont(fontZW);
            gp.drawString(enWord,ti,py,Graphics.TOP | Graphics.LEFT);
            py=py+fontZW.getHeight()+ppx;
        }
        //绘制"音标"及内容
        point++;
        if(point>=base){
            gp.setFont(fontBT);
            gp.drawString("音标:",px,py,Graphics.TOP | Graphics.LEFT);
            ti=px+twoL+ppx;
            Image pim=null;
            try{
                for (int i = 0, n = ybs.size(); i < n; i++) {
                    pim = Image.createImage("/org/zblog/zenghelper/res/symbol/" +
                                ybs.elementAt(i) + ".png");
                    gp.drawImage(pim,ti,py,Graphics.TOP | Graphics.LEFT);
                    ti=ti+pim.getWidth();
                }
            }
            catch(Exception e){e.printStackTrace();}
            py=py+fontBT.getHeight()+ppy;
        }
        //绘制"生词"及标记
        point++;
        if(point>=base){
            gp.drawString("生词:",px,py,Graphics.TOP | Graphics.LEFT);
            gp.setFont(fontZW);
            ti=px+twoL+ppx;
            if(sen)
                gp.drawString("是",ti,py,Graphics.TOP | Graphics.LEFT);
            else
                gp.drawString("否",ti,py,Graphics.TOP | Graphics.LEFT);
            py=py+fontBT.getHeight()+ppy;
        }
        //绘制"解释"及标记
        point++;
        if(point>=base){
            gp.setFont(fontBT);
            gp.drawString("解释:",px,py,Graphics.TOP | Graphics.LEFT);
            py = py + fontBT.getHeight();
        }
        gp.setFont(fontZW);
        for(int i=0;i<cnWords.size();i++){
            point++;
            if(point>=base){
                gp.drawString((String) cnWords.elementAt(i), px + 2, py,
                              Graphics.TOP | Graphics.LEFT);
                py = py + fontZW.getHeight();
            }
        }
    }

    /**
     * Command监听实现方法,用于捕获该对象定义的各种Command
     * @param command Command
     * @param displayable Displayable
     */
    public void commandAction(Command command, Displayable displayable) {
        String lb=command.getLabel();
        if(lb.equals("返回")){
            Navigator.current=Navigator.Main_Screen;
            Navigator.show();
        }
        else if(lb.equals("修改单词")){
            Navigator.show(new EnWordScreen(this));
        }
        else if(lb.equals("修改音标")){
            Navigator.show(new SelectSymbolScreen(this));
        }
        else if(lb.equals("标记生词")){
            Navigator.show(new IsSenScreen(this));
        }
        else if(lb.equals("添加解释")){
            Navigator.show(new AddInfoScreen(this));
        }
        else if(lb.equals("提交表单")){
            Alert message=new Alert("提交单词表单","  程序正在执行提交操作,请稍后.....",pr.busyImage,AlertType.CONFIRMATION);
            message.setTimeout(60000000);
            Navigator.show(message);
            Thread init=new Thread(this);
            init.start();
        }

    }

    /**
     * 执行添加单词操作
     */
    private void addWord(){
            //检查单词是否填写
            String mess=null;
            boolean ok=true;
            if(enWord==null||enWord.trim().equals("")){
                mess="错误:单词项为空";
                ok=false;
            }
            else{
                enWord=enWord.trim();
                //检查头两个char是否在z的范围内
                if(enWord.charAt(0)>'z'||(enWord.length()>1&&enWord.charAt(1)>'z')){
                    ok=false;
                    mess="错误:单词项非法字符";
                }
            }
            if(ok){
                DbTool dt = DbTool.getInstance();
                int res = -1;
                if(rsId==-1){
                    res = dt.addWord(this);
                    mess="单词添加成功!";
                }
                else{
                    res=dt.updateWord(this);
                    mess="单词修改成功!";
                }
                if(res!=-1){
                    clear();
                }else{
                    mess="失败:系统错误.";
                }
            }
            Alert result=new Alert("表单提交结果",mess,pr.busyImage,AlertType.CONFIRMATION);
            result.setTimeout(Alert.FOREVER);
            Navigator.display.setCurrent(result,this);
        }

        /**
         * 因为提交表单操作可能时间比较长,所有采用了多线程方式,后台执行提交操作,
         * 前台显示"请等待..."页面
         */
        public void run() {
            addWord();
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -