【发布时间】:2012-03-03 14:08:09
【问题描述】:
我有一个扩展画布的类。我又创建了一个画布类。但我无法在它们之间切换。
是否可以在 J2ME 中的画布之间切换?
【问题讨论】:
-
你试过什么?顺便说一下,是可能(并且非常容易)在画布之间切换
-
谢谢。我解决了我的问题 :)
我有一个扩展画布的类。我又创建了一个画布类。但我无法在它们之间切换。
是否可以在 J2ME 中的画布之间切换?
【问题讨论】:
import ...
public class MyMIDlet extends MIDlet{
...
final Canvas1 c1;
final Canvas2 c2;
...
public MyMIDlet(){
c1 = new Canvas1(this);
c2 = new Canvas2(this);
}
...
}
import ...
public class Canvas1 extends Canvas implements CommandListener{
MyMIDlet myMidlet;
Display disp;
Command switchDisp;
...
/**
*constructor
*/
public Canvas1(MyMIDlet myMidlet){
this.MyMIDlet = myMidlet;
disp = myMidlet.getDisplay();
switchDisp = new Command("switch", Command.SCREEN, 0);
this.addCommand(switchDisp);
this.setCommandListener(this);
}
...
public void paint(Graphics g){
g.setColor(255,255,255);
g.drawString("canvas1", 0, 0, 0);
}
...
public void commandAction(Command cmd, Displayable displayable){
disp.setCurrent(myMidlet.c2);
}
}
import ...
public class Canvas2 extends Canvas implements CommandListener{
MyMIDlet myMidlet;
Display disp;
Command switchDisp;
...
/**
*constructor
*/
public Canvas1(MyMIDlet myMidlet){
this.MyMIDlet = myMidlet;
disp = myMidlet.getDisplay();
switchDisp = new Command("switch", Command.SCREEN, 0);
this.addCommand(switchDisp);
this.setCommandListener(this);
}
...
public void paint(Graphics g){
g.setColor(255,255,255);
g.drawString("canvas2", 0, 0, 0);
}
...
public void commandAction(Command cmd, Displayable displayable){
disp.setCurrent(myMidlet.c1);
}
}
可显示对象是具有被放置在显示器上的能力的对象。 Displayable 类实现了 Displayable 接口。
Display 类是为每个活动的 MIDlet 实例化的显示管理器,并提供检索有关设备显示功能的信息的方法。通过调用 Display.setCurrent() 方法使画布可见。
画布实现了 Displayable 接口。
Displayable 类是可以在设备屏幕上显示的 UI 元素,而 Display 类抽象了实际设备屏幕的显示功能并提供给您。它提供了显示或更改要显示的当前 UI 元素的方法。因此,MIDlet 使用 Display 类的 setCurrent(Displayable element) 方法在 Display 上显示 Displayable UI 元素。
【讨论】:
MyMIDlet myMidlet 字段。在构造函数中使用midlet对象获取Didplay后,不再需要了。