两个Canvas切换的问题

本文介绍如何在Java ME应用中实现不同屏幕间的切换,通过Midlet类管理Canvas对象,并利用CommandListener接口响应用户操作,完成从一个Canvas到另一个Canvas的跳转。

在一个midlet中setCurrent()了一个Canvas类的对象c1,然后在c1中的keyPressed()的case FIRE:中想将屏幕转换到另外一个Canvas类的对象c2,该怎么写,具体原理哈,别光说setCurrent.如果回调midlet中的方法的话,在Canvas类中怎么标记midlet
我是菜鸟别见怪哈

public MyMIDlet extends MIDlet{

  public static Display display;
  public MyMIDlet(){
  display = Display.getDisplay(this);
   
  }

}

在界面c1中,使用如下代码切换:
MyMIDlet.display.setCurrent(new C2());

package prj1_1_2;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Midlet1 extends MIDlet {
   
private FirstCanvas fcan;
   
public static Display display;
   
public Midlet1() {
       
super();
        fcan
=new FirstCanvas();
        display
=Display.getDisplay(this);
    }

   
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {       

    }

   
protected void pauseApp() {
       

    }

   
protected void startApp() throws MIDletStateChangeException {
        display.setCurrent(fcan);

    }

}
package prj1_1_2;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;

public class FirstCanvas extends Canvas implements CommandListener{
   
private Command cmdSecond=new Command("第二屏",Command.SCREEN,1);
   
public FirstCanvas() {
       
super();
       
this.addCommand(cmdSecond);
       
this.setCommandListener(this);
    }

   
protected void paint(Graphics g) {
        g.setColor(
127, 0, 0);
        g.fillRect(
0, 0, this.getWidth(), this.getHeight());
        g.setColor(
0, 127, 0);
        g.drawString(
"FirstCanvas", 0, 0, Graphics.TOP|Graphics.LEFT);
       
    }

   
public void commandAction(Command c, Displayable d) {
       
if(c==cmdSecond){
            System.out.println(
"第二屏");
            Midlet1.display.setCurrent(
new SecondCanvas());
        }
       
    }

}
package prj1_1_2;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class SecondCanvas extends Canvas{

   
public SecondCanvas() {
       
super();
    }

   
protected void paint(Graphics g) {
        g.setColor(
0, 127, 0);
        g.fillRect(
0, 0, this.getWidth(), this.getHeight());
        g.setColor(
0, 0, 127);
        g.drawString(
"SecondCanvas", 0, 0, Graphics.TOP|Graphics.LEFT);
       
    }

}
先将所有的Canvas在Midlet中建立构造函数并初始化,你需要在某个Canvas中调用另外的Canvas时就只需要注意以下两点:
1、在Canvas中引入Midlet
eg:private shixunMIDlet midlet;
2、直接调用即可
eg:其中的showScnNew()都是Canvas在Midlet中建立的函数名
if(inMenu){
switch(curSel)
{
case 1:
midlet.showScnNew();
break;
case 2:
break;
case 3:
midlet.showScnHelp();
break;
case 4:
midlet.showScnAbout();
break;
case 5:
try {
midlet.destroyApp(true);
} catch (MIDletStateChangeException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
break;
}

来源:足球直播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值