我的J2ME编程练习(7)——Canvas2

80酷酷网    80kuku.com

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



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: