在一个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;
}
来源:足球直播