界面类的介绍
 MIDlet的用户界面分为两大块,底层图形类以及高级图形 类,高级控件都继承自Screen,使用高级图形类不直接进行屏幕的绘制,而是通过控件来完成,使用这种的好法是有良好的移植能力,在各个设备都能展示相 同的风格,但是可控性比较低,不能完全满足需求。而对于底层图形来说,它是继承自canvas类,它是直接取得对屏幕的控件权,直接处理底层事件,具有比 较强的扩展能力,可是移植性比较差。
而SCREEN和CANVAS都是继承自Displayable的子类,Screen有四个子类,分别是 TestBox/Alert/List/Form,其中Form类只是一个Item对象的容器,而存在的六个Item子类则是高层UI所具备的基本控件, 我们主要对这些用户界面的高级API来说。
 
  Command类
 记不记得游戏中那些个按钮?开始?退出?继续游戏?Command类就封装了这些行为的语义信息,它只包含了命令的信息,而不是激活命令时实际执行的功能。Command类的构造方法:
 public Command(Stringlabel,int commandType,int priorty);
第一参数是显示在画图上的名称,第二个参数是命令类型,第三个参数是优先权, 数字越小优先权越高,优先权越高代表用户越能够方便找到它们。commandType的取值范围是:BACK/CANCEL/EXIT和HELP /TIEM/OK/SCREEN/STOP.要注意的是,Command不会因为把设定成某一种类就具有“名称上”的功能。打比方说,不能因为设定成为 command.EXIT后,选择就真的会终止程序。在不同的机型上,Command的位置也会有所不同,比方在Noika9210或Palm OS上,有些Command的就会以抬头功能菜单的方式呈现,甚至有些机器还会根据类型自动帮我们修改按钮在屏幕上的名称。Command类既可以放在 Screen对象上,也可以放在canvas上。下例看一个例子,我们实例化八个Command的控件,列举Command类中的详细用法:
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
 
public class TestComma extends MIDlet {
 private Display display;
 public TestComma() {
  super();
  display = Display.getDisplay(this);
  // TODO 自动生成构造函数存根
 }
 protected void startApp()  {
   Form f = new Form("command代码测试");
   Command c1 = new Command("返回",Command.BACK,1);
   Command c2 = new Command("退出",Command.EXIT,1);
   Command c3 = new Command("取消",Command.CANCEL,1);
   Command c4 = new Command("帮助",Command.HELP,1);
   Command c5 = new Command("项目",Command.ITEM,1);
   Command c6 = new Command("没问题",Command.OK,1);
   Command c7 = new Command("屏幕",Command.SCREEN,1);
   Command c8 = new Command("停止",Command.STOP,1);
   f.addCommand(c1);
   f.addCommand(c2);
   f.addCommand(c3);
   f.addCommand(c4);
   f.addCommand(c5);
   f.addCommand(c6);
   f.addCommand(c7);
   f.addCommand(c8);
         display.setCurrent(f);
 }
 protected void pauseApp() {
  // TODO 自动生成方法存根
 }
 protected void destroyApp(boolean arg0){
  // TODO 自动生成方法存根
 }
}
通用事件处理-CommandListener
  Command必须和CommandListener事件处理接口一起使用才能反应用户的运作,由于设定事件处理函数
setCommandListener()定义于Displayable类中,所以CommandListener是一个高级API与低级API通用的
件处理接口。
 当我们进入界面菜单中,用户就会利用按钮来选择自己所选的菜单,如果有任一菜单被选中,实现了
CommandAction()方法就会被调用。这时就该为这些被我们选定好的选项做些什么了。看例子:
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
 
public class CommandListenerTest extends MIDlet implements CommandListener {
       private Display dis;
  public CommandListenerTest() {
       super();
       dis = Display.getDisplay(this);
 }
 protected void startApp() {
        Form f = new Form("CommandListener测试");
        Command c1 = new Command("返回",Command.BACK,1);
        Command c2 = new Command("确定",Command.OK,1);
        Command c3 = new Command("离开",Command.EXIT,1);
        f.addCommand(c1);
        f.addCommand(c2);
        f.addCommand(c3);
        f.setCommandListener(this);
        dis.setCurrent(f);
 }
 protected void pauseApp() {
 }
 protected void destroyApp(boolean arg0) {
 }
 public void commandAction(Command arg0, Displayable arg1) {
  System.out.println("短名称:"+arg0.getLabel());
  System.out.println("类型:"+arg0.getCommandType());
  System.out.println("优先权:"+arg0.getPriority());
 }
}
 执行结果如图所示:
  [转载]利用Screen进行手机游戏界面设计(CommandListe
  f.setCommandListener(this)用来注册事件处理函数,也就是说如果Form这个画面上有菜单项被选定,系统就会被调用CommandListenerTest
这个类里的commandAction里的函数,并将Command对象和Displayable对象的引用传递进来,在例子中,处理菜单被选定的事件函数为是:
 public void commandAction(Command arg0, Displayable arg1) {
  System.out.println("短名称:"+arg0.getLabel());
  System.out.println("类型:"+arg0.getCommandType());
  System.out.println("优先权:"+arg0.getPriority());
     }
  这里arg0就是被选定的系统菜单项的引用,arg1就是发生事件的来源,也就是包含了此Command对象实体,只不过在些被上转型成Displayable
接口了。这里的参数名称是可以自已修改的
    Ticker类
  Ticker类是一个类似跑马灯似的类,所有的Displayable子类都加入Ticker。我们利用定义在Displayable类中的setTicker()来设定画面上
的Ticker,或者用getTicker()来取出面图内含的Ticker对象。例子:
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
public class TickerTest extends MIDlet implements CommandListener {
  private Display display;
 public TickerTest() {
  super();
  display = Display.getDisplay(this);
 }
 Form f;
 protected void startApp()  {
           f = new Form("TickerTest测试");
          Command start = new Command("开始",Command.OK,1);
          Command stop = new Command("中止",Command.STOP,1);
          f.addCommand(start);
          f.addCommand(stop);
          f.setCommandListener(this);
          display.setCurrent(f);
 }
 protected void pauseApp() {
  
 }
 protected void destroyApp(boolean arg0)  {
  
 }
 public void commandAction(Command c, Displayable s) {
                   String cmd = c.getLabel();
                   if(cmd.equals("开始")){
                   
                   Ticker t = new Ticker("运行中");
                   f.setTicker(t);
                   //f.setTicker(new Ticker("运行中"));
                   }else if(cmd.equals("中止")){
                    f.setTicker(null);
                   }
 }
}
执行结果如图所示:
[转载]利用Screen进行手机游戏界面设计(CommandListe
Ticker类本身只有一个名为setString()的方法,用来设定所显示的内容。
posted on 2013-03-06 12:32  爱哎唉  阅读(233)  评论(0)    收藏  举报