J2ME那些事儿――005(3)

阅读导航:
1、Form 类
2、Item 类
 

1、Form 类

      Form类是高级界面Screen类的直接子类。是使用最灵活的高级界面。他可以包含一下8种组件的任意组合:TextField(文本组件)、StringItem(字符串组件)、ImageItem(图像组件)、DataField(日期组件)、ChoiceGroup(选项集合)、Gauge(标尺)以及MIDP 2.0引入的CustomItem(自定义组件)和Spacer(占位符)。通常Item类的任何子类都可以包含进表单中。
      (1)构造方法
      Form有两个构造方法:(a)Form(String title)――根据指定标题创建新的Form对象,title可设为null,表示没有标题。
      构造完成之后Form表单不包含任何组件,然后使用append或者insert方法插入元素,例如:
      Form mainForm = new Form("标题");
      mainForm.append(item);

      (b)Form(String title,Item[] items)――带标题并且初始化所包含的组件元素,参数title和items都可以为null,表示没有标题和没有组件。例如:
      Item[] items = new Item[]{
                          new TextField("用户名:","HanMeimei",50,TextField.ANY),
                          new TextField("密码:","123456",50,TextField.PASSWORD)
                         };
      Form mainForm = new Form("Form演示:登录",items);

      构造完成Form对象之后,使用Display的方法setCurren()把它设置为当前显示屏幕,从而显示信息或者与用户进行交互。
      (2)添加Command
和其他Displayable对象一样,Form对象也可以在其中添加Command对象,并调用setCommandListener()方法来绑定一个事件监听器。
      (3)侦听事件
      当放置于Form对象上组件内部的用户接口组件内部状态改变时,内部组件会对所有经由setItemStateListener()向它注册的类中的itemStateChanged()方法发出状态改变的消息。
      应用程序使用ItemStateListener接口来接收Form对象内可交互组件的事件,这些事件用来指示组件内部状态的改变。
      以下操作会调用itemStateChanged(Item item)方法:
      (a)改变ChoiceGroup中的选择状态;
      (b)调整了Gauge的值;
      (c)输入或者改变了TextField中的值;
      (d)在DateField中输入一个新 的如期或者时间;
      (e)Item.notifyStateChanged()被组件对象调用。
 
2、Item 类

      Item类是一个虚类,因此它没有构造方法,它的子类对象就是表单(Form)中的组件,作为参数传递给Form对象与用户进行交互。
      下面是Item类及其直接子类的继承关系图:
 
      (1)Item对象的事件监听
      MIDP 2.0还允许Item组件添加软键Command对象,并且绑定ItemCommandListener组件软键事件监听器,ItemCommandListener的使用和CommandListener的使用大同小异。可以为Item组件添加Command或者DefaultCommand对象,然后绑定ItemCommandListener监听器。其相关操作如下:
  •       增加和删除Command数组必须依靠addCommand()和removeCommand()。
  •       设定ItemCommandListener的引用要使用setItemCommandListener()。
  •       设定DefaultCommand必须使用setDefaultCommand()。
      当将Item加入Form后,所选的Item内部的Command数组就会变成系统菜单项。
      任何菜单项被选定后,实现了ItemCommandListener接口的类中的commandAction()方法就会被调用。
      需要说明的是,commandAction(Command c,Item i)方法也可以使用Item变量i进行选择响应,例如:
public void commandAction(Command c,Item i){
 
      if(i==oneItem){
            if(c==oneCommand){
                  .........                     //相应处理
            }
      }else  if(i==otherItem){
            if(c==otherCommand){
                  .........                     //相应处理
            }
      }
 
}
 
3、应用范例
      下面给出一个应用范例程序,
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class Demo extends MIDlet implements CommandListener {
    private Command exitC = new Command("Exit", Command.EXIT, 1);
    private boolean firstTime;
    private Form mainForm;          //创建 Form 对象
    private TextField textField;     //创建 TextField 对象
    private  StringItem item;          //创建 StringItem 对象
    public Demo() {
        firstTime = true;
        mainForm = new Form("Text Field");
        textField  = new TextField("textField text", "", 15, TextField.ANY);
        item   =  new StringItem(": ", "text");
    }
    protected void startApp() {
        if (firstTime) {
            mainForm.append("textField");
            mainForm.append("item");
            mainForm.addCommand(exitC);
            mainForm.setCommandListener(this);
            firstTime = false;
        }
        Display.getDisplay(this).setCurrent(mainForm);
    }
    public void commandAction(Command c, Displayable s) {
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }
    }
    protected void destroyApp(boolean unconditional) {
    }
    protected void pauseApp() {
    }
}
 
      高级界面API虽然已经封装好了,不过不同的手机比如诺基亚和索尼爱立信,相同的程序也许某个组件的显示效果也会有所不同,那是因为手机的操作系统和本身硬件支持的不同引起。用户在开发时可以真机测试,看看效果。
      本节只是粗略介绍Form类和Item类,具体的属性和方法就不一一陈述,因为Wireless Toolkit 自带了包含了所有的API文档,开发者可以随时研究。本人只是起到抛砖引玉的作用,讲解中不足之处望高手们多多指教:-)。
      随后的章节将会总结J2ME低级界面开发应用。
 
 
 
 
 

你可能感兴趣的:(api,职场,应用,j2me,休闲)