| 封装MathFP和FloatBox |
|
|
|
|
Author: 一滴蔚蓝色 | Date: 2008-05-24 | View: 414
|
开发技术 -
程序设计
| ||||
|
作者:黑洞 前几天看到mathfp的文章,很有些激动, 1。首先是浮点常数,这个没什么好说的 public static final Float PI=new Float(MathFP.PI); 2。字段和构造函数 long v; 最后一个构造函数相当与clone的意思。 3。函数的封装(我把基本运算也归到里面了) public Float add(Float b) 大家看出什么问题来了吗? public Float add_s(Float b) 相当于+=的功能,于是可以调用x.add(1).add_s(2).add_s(3).add_s(4)来实现 既然有了浮点数,我们如何输入呢?文本框有数字模式但是不支持浮点数, 这就是整个实现: package vmlinux.math;import javax.microedition.lcdui.*; import vmlinux.app.*; public class FloatBox extends Canvas { public static final String[] Keypad=new String[]{ "1","2","3", "4","5","6", "7","8","9", ".","0","+/-" }; public Command Done; public Command Cancel; public Command Delete; StringBuffer val_; boolean dot_; Image imgKeypad_; char c_; public FloatBox(CommandListener o) { Cancel=new Command(StringManager.get("FloatBox.Cancel"),Command.SCREEN,3); Done=new Command(StringManager.get("FloatBox.Done"),Command.SCREEN,2); Delete=new Command(StringManager.get("FloatBox.Delete"),Command.SCREEN,1); this.addCommand(Cancel); this.addCommand(Done); this.addCommand(Delete); this.setCommandListener(o); val_=new StringBuffer("0"); dot_=false; } protected void paint(Graphics g) { g.setColor(0xff,0xff,0xff); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0x00,0x00,0x00); g.drawRect(5,5,getWidth()-10,30); g.setColor(0x00,0x00,0xff); g.drawString(val_.toString(),getWidth()-10,10,Graphics.TOP|Graphics.RIGHT); drawKeypad(Keypad,40,g,c_); } void drawKeypad(String[] keys,int ytake,Graphics gx,char chr) { int xs=getWidth()/3; int ys=(getHeight()-ytake)/4; int hcenter=Graphics.TOP|Graphics.HCENTER; if(imgKeypad_==null) { imgKeypad_=Image.createImage(getWidth(),getHeight()-ytake); Graphics g=imgKeypad_.getGraphics(); int c=0; for(int j=0;j<4;++j) { for(int i=0;i<3;++i) { g.setColor(0xcc,0xcc,0xcc); g.drawRect((xs+1)*i,(ys+1)*j,xs-2,ys-2); if(c<keys.length) { g.setColor(0x00,0x00,0x00); g.drawString(keys[c++],xs*i+xs/2-2,ys*j+ys/2-8,hcenter); } } } } gx.drawImage(imgKeypad_,0,ytake,Graphics.TOP|Graphics.LEFT); for(int i=0;i<keys.length;++i) { if(keys[i].indexOf(chr)>=0) { gx.setColor(0xbb,0xbb,0xbb); gx.fillRect((xs+1)*(i%3),(ys+1)*(i/3)+ytake,xs-2,ys-2); gx.setColor(0xff,0xff,0xff); gx.drawString(keys[i],xs*(i%3)+xs/2,ys*(i/3)+ytake+ys/2-5,hcenter); break; } } } protected void keyPressed(int key) { if(key==Canvas.KEY_NUM0) { if(val_.length()==0 || (val_.length()>0 && val_.charAt(0)!='0')) val_.append('0'); c_='0'; } else if(key>=Canvas.KEY_NUM1 && key<=Canvas.KEY_NUM9) { char c=(char)('1'+key-Canvas.KEY_NUM1); if(val_.length()==1 && val_.charAt(0)=='0') { val_.deleteCharAt(0); val_.append(c); } else val_.append(c); c_=c; } else if(key==Canvas.KEY_STAR) { if(!dot_) { val_.append('.'); dot_=true; } c_='.'; } else if(key==Canvas.KEY_POUND) { if(val_.length()>0 && val_.charAt(0)=='-') val_.deleteCharAt(0); else if(val_.length()!=1 || val_.charAt(0)!='0') val_.insert(0,'-'); c_='-'; } else if(this.getGameAction(key)==Canvas.LEFT) { delete(); } repaint(); } public void delete() { if(val_.length()>0) { if(val_.charAt(val_.length()-1)=='.') dot_=false; val_.deleteCharAt(val_.length()-1); if(val_.length()==1 && val_.charAt(0)=='-') val_.deleteCharAt(0); } if(val_.length()==0) val_.append('0'); } public Float getValue() { return new Float(val_.toString()); } public void setValue(Float x) { val_.delete(0,val_.length()); val_.append(x.toString()); } } 没什么难度,不多说了。StringManager参见我的另一篇字符串管理的文章。 有什么意见或建议请联系vmlinuxx@gmail.com,共同学习,共同进步:) 本文关键字: 封装 MathFP FloatBox 阅读数: 415 | 打印 | E-mail
|
||||||||
| (J2ME中的字符串管理和多语言支持) < 上一篇 | 下一篇 > (j2me polish学习) |
|---|