界面类的介绍
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.*;
import javax.microedition.lcdui.*;
public class TestComma extends
MIDlet {
private Display display;
private Display display;
public
TestComma() {
super();
display = Display.getDisplay(this);
// TODO 自动生成构造函数存根
}
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);
}
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 自动生成方法存根
// TODO 自动生成方法存根
}
protected void destroyApp(boolean
arg0){
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
}
通用事件处理-CommandListener
Command必须和CommandListener事件处理接口一起使用才能反应用户的运作,由于设定事件处理函数
setCommandListener()定义于Displayable类中,所以CommandListener是一个高级API与低级API通用的
件处理接口。
当我们进入界面菜单中,用户就会利用按钮来选择自己所选的菜单,如果有任一菜单被选中,实现了
CommandAction()方法就会被调用。这时就该为这些被我们选定好的选项做些什么了。看例子:
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
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);
}
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);
}
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());
}
System.out.println("短名称:"+arg0.getLabel());
System.out.println("类型:"+arg0.getCommandType());
System.out.println("优先权:"+arg0.getPriority());
}
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());
}
这个类里的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;
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);
}
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);
}
}
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);
}
}
}
执行结果如图所示:
执行结果如图所示:
Ticker类本身只有一个名为setString()的方法,用来设定所显示的内容。
浙公网安备 33010602011771号