|
|
J2ME专题 发表
Canvas本身有两种状态,一种是普通默认情况下的,一种是全屏状态,可以用setFullScreenMode()方法来对其设定,两者之间的区别在于当我们使用全屏幕状态的时候,Title、Ticker以及我们的Command都无法在屏幕上显示。
当我们调用setFullScreenMode()的时候,不管是什么模式,都会调用seizeChanged()这个方法,并传入屏幕的高度和宽度作为其参数。
对于某些突发事件,比如说来电等等,屏幕会被系统画面所覆盖的时候,就会调用hideNotify()这个方法,当恢复原状时,就会调用我们原本的画面,那么系统就会同时调用showNotify()这个方法。在实际操作过程当中,应该覆写这两个方法,以便在可见性变化时,使程序做出相应的反应,Canvas会在它被显示的时候自动调用paint()方法,所以我们不必去调用repaint()方法。
下面给出一段代码,让大家体会一下如何在实际开发过程当中妥善处理屏幕事件:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class test4 extends Canvas
implements CommandListener
{
public test4()
{
setTitle("全屏幕测试") ;
setTicker(new Ticker("Ticker ")) ;
addCommand(new Command("全屏幕",Command.SCREEN,1)) ;
addCommand(new Command("正常",Command.SCREEN,1)) ;
setCommandListener(this) ;
}
public void paint(Graphics g)
{
g.setColor(125,125,125);//灰色
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0,0,0);//黑色
g.drawLine(10,10,150,10);
}
public void commandAction(Command c,Displayable s)
{
String cmd = c.getLabel();
if(cmd.equals("全屏幕"))
{
setFullScreenMode(true) ;
}else if(cmd.equals("正常"))
{
setFullScreenMode(false) ;
}
}
protected void sizeChanged(int w,int h)
{
System.out.println("改变后的宽度:"+w) ;
System.out.println("改变后的高度:"+h) ;
}
protected void hideNotify()
{
System.out.println("屏幕被系统遮蔽") ;//会在WTK控制台中显示,
//读者需要注意
}
protected void showNotify()
{
System.out.println("屏幕显示在屏幕上") ;
}
}
从截图1和截图3可以看出全屏幕和普通模式的区别,全屏幕的Canvas的显示区域覆盖了原来显示标题和Ticker的地方。
|
|