服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

j2me学习札记2


  command对象
  发信站: 北大未名站 (2001年10月20日20:33:56 星期六) , 站内信件
   在前面我们其实已经使用过command对象了。j2me的事件系统比较特殊,你必须首先定义一系列的命令,然后注册到容器对象中,例如(form、alert、list、textbox),再设定命令监听者
  ,编写好commandaction()方法即可。当系统发送某个命令,便由commandaction()方法进行统筹处理。下面的程序演示了如何定义多个命令以及如何编写commandaction()方法。
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class cmd extends midlet implements commandlistener
  {
  private display display;
   private form props;
  
   private command backcommand = new command("back", command.back, 2);
   private command cancelcommand = new command("cancel", command.cancel, 1);
   private command exitcommand = new command("exit", command.exit, 1);
   private command helpcommand = new command("help", command.help, 1);
   private command itemcommand = new command("item", command.item, 1);
   private command okcommand = new command("ok", command.ok, 1);
   private command screencommand = new command("screen", command.screen, 1);
   private command stopcommand = new command("stop", command.stop, 1);
  
  
  public cmd()
  {
  display = display.getdisplay(this);
   }
  
  public void startapp()
  {
  props = new form("hello world");
  props.append("hello world!/n");
  
  props.addcommand(backcommand);
  props.addcommand(cancelcommand);
  props.addcommand(exitcommand);
  props.addcommand(helpcommand);
  props.addcommand(itemcommand);
  props.addcommand(okcommand);
  props.addcommand(screencommand);
  props.addcommand(stopcommand);
  props.setcommandlistener(this);
  display.setcurrent(props);
   }
  
  public void showscreen(string cmd)
  {
  form form=new form("show cmd");
  form.append(cmd);
  form.addcommand(exitcommand);
  form.setcommandlistener(this);
  display.setcurrent(form);
  
  }
  
  public void commandaction(command c, displayable s)
  {
  if (c == exitcommand)
  {
  destroyapp(false);
   notifydestroyed();
  }
  else if(c==helpcommand)
  {
  showscreen("help");
  }
  else if(c==backcommand)
  {
  showscreen("back");
  }
  else if(c==cancelcommand)
  {
  showscreen("cancel");
  }
  else if(c==itemcommand)
  {
  showscreen("item");
  }
  else if(c==okcommand)
  {
  showscreen("ok");
  }
  else if(c==screencommand)
  {
  showscreen("screen");
  }
  if(c==stopcommand)
  {
  showscreen("stop");
  }
  
  
   }
  
  public void destroyapp(boolean unconditional)
  {
   }
  
  public void pauseapp()
  {
  display.setcurrent(null);
  props = null;
   }
  
  }
   在上面的程序(cmd.java)中定义了八个命令。如果commandaction()方法接到这八个命令,多半是调用showscreen()方法,将这几个命令输出。showscreen()方法会产生一个新的容器对象(form),作为当前的屏幕,并把截获的命令显示在屏幕中。
   cmd.java的运行效果如下2图所示(当屏幕出现hello world字样的时候,你需要按下退出键,命令菜单就会出现了,你可以依次执行各个命令)。
  
  
  textbox文本框对象
  发信站: 北大未名站 (2001年10月20日20:36:34 星期六) , 站内信件
  
   textbox是一个容器类型的对象(和form的性质一样)。用法如下所示:
  
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class showtextbox extends midlet implements commandlistener
  {
  private display display;
   private textbox txtbox;
  
  private command exitcommand = new command("exit", command.exit, 1);
  
  public showtextbox()
  {
  display = display.getdisplay(this);
   }
  
  public void startapp()
  {
  //or :
  //string str="hello world";
  //txtbox = new textbox("text box",str,str.length(),0);
  //the follow code is wrong:
  //txtbox = new textbox("text box",str,any number here,0);
  
  txtbox = new textbox("text box",null,200,0);
  
  txtbox.addcommand(exitcommand);
  txtbox.setcommandlistener(this);
  display.setcurrent(txtbox);
   }
  
  public void commandaction(command c, displayable s)
  {
  if (c == exitcommand)
  {
  destroyapp(false);
   notifydestroyed();
  }
   }
  
  public void destroyapp(boolean unconditional)
  {
   }
  
  public void pauseapp()
  {
  display.setcurrent(null);
  txtbox = null;
   }
  
  }
   请注意textbox类的构造函数,第一个参数实际上是窗口的名称(因为textbox是一个容器,可能是当前屏幕的显示对象),第二个参数是缺省值,第三个参数是输入字符的总长度。如果你设置了文本框的缺省值,那么第三个参数必须是缺省字符的长度。如果第三个参数的值和缺省字符的长度不一样,那么程序运行不成功(编译可以通过)。如果你将第二个参数置为null值,那么第三个参数可以任意设。
   showtextbox.java的运行效果如下图所示:
  
  textfield文本域对象
  发信站: 北大未名站 (2001年10月20日20:37:59 星期六) , 站内信件
  
   textfield和textbox有点相似,不过textbox是多行的,而textfield是单行的。而且textbox是容器类型的对象,但是textfield是项目类型的对象,只能够被容器包含,不能够单独显示。
  textfield文本域对象的用法如下所示:
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class showtextfield extends midlet implements commandlistener
  {
  private display display;
  private form props;
   private textfield txtfield;
  
  private command exitcommand = new command("exit", command.exit, 1);
  
  public showtextfield()
  {
  display = display.getdisplay(this);
   }
  
  public void startapp()
  {
  props = new form("hello world");
  props.append("hello world!/n");
  txtfield=new textfield("email:", "", 15,textfield.emailaddr);
  props.append(txtfield);
  props.addcommand(exitcommand);
  props.setcommandlistener(this);
  display.setcurrent(props);
   }
  
  public void commandaction(command c, displayable s)
  {
  if (c == exitcommand)
  {
  destroyapp(false);
   notifydestroyed();
  }
   }
  
  public void destroyapp(boolean unconditional)
  {
   }
  
  public void pauseapp()
  {
  display.setcurrent(null);
  props = null;
   }
  
  }
   请注意startapp()方法,我们使用form对象作为当前屏幕的显示对象,而将textfield对象作为form的一个子项目显示。下面来介绍textfield类的构造函数,第一个参数是文本域的名称,第二个参数是缺省值,第三个参数是长度,第四个参数是文本域的类型,可选的值有: textfi
  eld.password、textfield.emailaddr、textfield.phonenumber、textfield. url、textfi
  eld. numeric等等。构造好textfield对象之后,调用form的append()方法将它添加到form对
  象的子项目中。showtextfield.java程序的运行效果如下图所示:
  
  datefield对象
  发信站: 北大未名站 (2001年10月20日20:39:14 星期六) , 站内信件
  
   datefield对象和textfield对象一样同属于项目类型的对象,不能够单独显示,必须作为容器对象的子项目显示。datefield对象的作用是显示一个日期,它和windows控制面板中的时间和日期设置程序有点近似。datefield对象的用法如下所示:
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microeditio

扫描关注微信公众号