📄 addwordscreen.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 + -