/*  * 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.关于这一点,应该这样理解: 既然使用了低级界面,那么就意味着屏幕上的一切都归你管,你有最大的权利。但你也有相应的义务,清除屏幕的工作自然也要你来做 
 
  
 
  |