/* * Canvas2let.java * * Created on 2005年4月19日, 下午5:27 */ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * * @author Administrator * @version */ public class Canvas2let extends MIDlet implements CommandListener { private ChoiceGroup faceChoice; private ChoiceGroup styleChoice; private ChoiceGroup sizeChoice; private Command okCommand; private Command exitCommand; private Command backCommand; private TextBox faceTextBox; private TextBox styleTextBox; private TextBox sizeTextBox; private Form choiceForm; private Display aDisplay; private MyCanvas canvas; int face; int size; int style; public Canvas2let(){ choiceForm=new Form("Select Font"); faceChoice=new ChoiceGroup("外观",Choice.EXCLUSIVE); faceChoice.append("PROPORTIONAL",null); faceChoice.append("MONOSPACE",null); faceChoice.append("SYSTEM",null); styleChoice=new ChoiceGroup("风格",Choice.MULTIPLE); styleChoice.append("PLAIN",null); styleChoice.append("BOLD",null); styleChoice.append("ITALIC",null); styleChoice.append("UNDERLINED",null); sizeChoice=new ChoiceGroup("大小",Choice.EXCLUSIVE); sizeChoice.append("SMALL",null); sizeChoice.append("MEDIUM",null); sizeChoice.append("LARGE",null); exitCommand=new Command("退出",Command.EXIT,1); okCommand=new Command("确定",Command.OK,1); backCommand=new Command("后退",Command.BACK,2); choiceForm.append(faceChoice); choiceForm.append(styleChoice); choiceForm.append(sizeChoice); choiceForm.addCommand(exitCommand); choiceForm.addCommand(okCommand); choiceForm.setCommandListener(this); canvas=new MyCanvas(); } public void startApp() { aDisplay=Display.getDisplay(this); aDisplay.setCurrent(choiceForm); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c ,Displayable d){ if (c==exitCommand){ destroyApp(false); notifyDestroyed(); } else { //select the face and size face=faceChoice.getSelectedIndex(); switch(face){ case 0: face=Font.FACE_PROPORTIONAL;break; case 1: face=Font.FACE_MONOSPACE;break; case 2: face=Font.FACE_SYSTEM;break; } size=sizeChoice.getSelectedIndex(); switch(size){ case 0:size=Font.SIZE_SMALL;break; case 1:size=Font.SIZE_MEDIUM;break; case 2:size=Font.SIZE_LARGE;break; } //select the style boolean[] styleSelect =new boolean[4]; for(int i=0;i<4;i++){ if (styleChoice.isSelected(i)&&i==0){ style |= Font.STYLE_PLAIN; } else if (styleChoice.isSelected(i)&&i==1){ style |=Font.STYLE_BOLD; } else if (styleChoice.isSelected(i)&&i==2){ style |=Font.STYLE_ITALIC; } else if (styleChoice.isSelected(i)&&i==3){ style |=Font.STYLE_UNDERLINED; } } //canvas=new MyCanvas(); aDisplay.setCurrent(canvas); } } class MyCanvas extends Canvas implements CommandListener{ public MyCanvas(){ addCommand(backCommand); setCommandListener(this); } public void paint(Graphics g){ g.setColor(0xFFFFFF); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0); String s="Hello World"; Font f=Font.getFont(face,style,size); g.setFont(f); g.drawString(s,150,250,Graphics.RIGHT|Graphics.BOTTOM); } public void commandAction(Command c ,Displayable d){ if (c==backCommand){ aDisplay.setCurrent(choiceForm); } } } } 这个程序主要是加深对Canvas的Font的认识。 1.MIDlet类的构造函数应该是public Canvas2let()而不应该是public void Cancas2let()。因为加了void就不会返回该类的对象,导致程序运行后没有反映。这是一个教训。 2.在Canvas中,需要使用代码 g.setColor(0xFFFFFF); g.fillRect(0,0,getWidth(),getHeight()); 来清除上一个界面。然后再使用 g.setColor(0);来设置绘画颜色。 3.关于这一点,应该这样理解: 既然使用了低级界面,那么就意味着屏幕上的一切都归你管,你有最大的权利。但你也有相应的义务,清除屏幕的工作自然也要你来做

|