多个canvas切换时,屏幕显示问题

lalio77 2011-06-15 07:27:27
写了类似这样的结构:
{

public class myj2me extends MIDlet {
Display display.....//初始化过程略去
//构造函数中
canvas1 can1 = new canvas1(this);
canvas2 can1 = new canvas2(this);
public void startApp(){display.setCurrent(can1);}
public void setcanvas1(){display.setCurrent(can1);}
public void setcanvas2(){display.setCurrent(can2);}
}
class canvas1 extends Canvas implements CommandListener {
myj2me j2me;
public canvas1(myj2me my_j2me) {
j2me = my_j2me;
}
public void commandAction(Command cmd,Displayable dis){
if(cmd==...){
j2me.setcanvas2();
}
}
}
class canvas2 extends Canvas implements CommandListener {
myj2me j2me;

public canvas2(myj2me my_j2me) {
j2me = my_j2me;
}
public void commandAction(Command cmd,Displayable dis){
if(cmd==...){
j2me.setcanvas3();
}
}
}
}

初学j2me,想当然的就这样写了,果然有问题,若先显示can1,从can1通过调用setcanvans2()切换到can2的时候屏幕不会刷新,也就是can1的界面还在。

请教一下要如何才能刷新屏幕呢?
...全文
320 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandeel 2011-06-16
  • 打赏
  • 举报
回复
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;



public class Canvas123 extends MIDlet {
Display display;
Command cmdChange = new Command("change",Command.SCREEN,1);
//初始化过程略去
//构造函数中
canvas1 can1 = new canvas1(this);
canvas2 can2 = new canvas2(this);
public void startApp(){
display = Display.getDisplay(this);
display.setCurrent(can1);
}
public void setcanvas1(){display.setCurrent(can1);}
public void setcanvas2(){display.setCurrent(can2);}
protected void destroyApp(boolean arg0)
throws MIDletStateChangeException {
// TODO Auto-generated method stub

}
protected void pauseApp() {
// TODO Auto-generated method stub

}
}

class canvas1 extends Canvas implements CommandListener {
Canvas123 j2me;
Command cmdChange = new Command("change",Command.SCREEN,1);

public canvas1(Canvas123 my_j2me) {
j2me = my_j2me;
addCommand(cmdChange);
setCommandListener(this);
}
public void commandAction(Command cmd,Displayable dis){
if(cmd==cmdChange){
j2me.setcanvas2();
}
}
protected void paint(Graphics g) {
// TODO Auto-generated method stub
g.setColor(255, 255, 255);
g.drawString("Hello1", 0, 0, Graphics.LEFT|Graphics.TOP);
}
}
class canvas2 extends Canvas implements CommandListener {
Canvas123 j2me;
Command cmdChange = new Command("change",Command.SCREEN,1);
public canvas2(Canvas123 my_j2me) {
j2me = my_j2me;
addCommand(cmdChange);
setCommandListener(this);
}
public void commandAction(Command cmd,Displayable dis){
if(cmd==cmdChange){
j2me.setcanvas1();

}
}
protected void paint(Graphics g) {
// TODO Auto-generated method stub
g.setColor(255, 255, 255);
g.drawString("Hello2", 0, 0, Graphics.LEFT|Graphics.TOP);

}
}
sandeel 2011-06-16
  • 打赏
  • 举报
回复
是你的Canvas2的对象错了:

canvas1 can1 = new canvas1(this);
canvas2 can1 = new canvas2(this); ----------------这一行

修改为:
canvas1 can1 = new canvas1(this);
canvas2 can2 = new canvas2(this);

就可以了

softice_ 2011-06-15
  • 打赏
  • 举报
回复
还有paint()代码
softice_ 2011-06-15
  • 打赏
  • 举报
回复
setcanvans代码贴出来看看
lalio77 2011-06-15
  • 打赏
  • 举报
回复
嗯。。网上都说用多个canvas不好。。
lalio77 2011-06-15
  • 打赏
  • 举报
回复
setcanvas()有贴出来,在myj2me类中;
paint函数只是一些简单的drawstring,本来就是用来测试的,每个canvas都有自己的paint,在不同的地方写字符串

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧