服务热线:13616026886

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

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

java手机软件图形界面api之form相关api


  除了基于屏幕的组件外,你还应该掌握使用表单把多个组件组织到一个屏幕上去。这一部分将讨论form类和可以放置到表单上去的组件。

  1. form

  一个表单对象是一个screen,它可以包含任意的项,包括只读的和可编辑的文本框,图像,日期域,gauge以及选项组组件。前面已提到,任何item类的子类都可以放置到表单对象上去。form类的构造器如下:

public form(string title);
public form(string title, item[] items);

  第一个构造器创建一个空的表单,仅有一个标题。第二个构造器创建一个含有标题和初始内容的表单。如,下面的程序创建一个空的表单,其标题是"choose an item",见图1。这是一个常规的屏幕。

java手机软件图形界面api之form相关api(图一)
图 1.一个空的form

form form = new form("choose an item");
  form对象并不使用任何布局管理器。代之的是,form对象将象一个列表一样安排它的组件,通常是从顶到底。就象一个列表中的选项,表单中的各个项可以进行编辑,如插入,添加和删除。form类的方法列举如下。

  把一个图像加到表单的结尾,可以用:

public int append(image img);
  下面方法添加一个item 的子类化对象到表单的结尾:

public int append(item item);
  下面方法添加一个字符串到表单的结尾:

public int append(string str);
  下面方法删除表单上在给定位置的项,同时改变表单的大小:

public void delete(int itemnum);
  你可以使用下面方法存取表单上的任何项,而表单内容保持不变。

public item get(int itemnum);
  下面方法在表单上插入一项,插在指定索引的前面:

public void insert(int itemnum, item item);
  下面方法替换表单上的前一项:

public int set(int itemnum, item item);
  最后,你可用下面size( )方法来查找表单上的项的当前序号:

public int size( );
  可以放置到一个表单上去的gui组件有:choicegroup,datefield,gauge,imageitem,stringitem和textfield。所有这些都是抽象类item 的子类。稍后,我们将看到如何把这些项放置到屏幕上去。首先让我们依次作一下介绍。

  2. item

  item抽象类用作可以放置到表单或者alert上的组件的基类。所有的item对象都有一个标签(如有一个字符串依附到其上),这可以用下面方法存取:

public string getlabel( );
public void setlabel(string s);

  该抽象类仅有这两个方法。

  3. choicegroup

  choicegroup对象描述了一组放置在表单上的可选择的选项。类似于list类,它也实现了choice接口,而且还继承了item抽象类。该对象可以指明选择一项,或者进行多个选择。choicegroup类构造器如下:

public choicegroup(string label, int choicetype);
public choicegroup(string label, int choicetype,string[] stringelements, image[] imageelements);

  第一个构造器创建一个空的choicegroup组件,同时指明其标签和类型。既然该类实现了接口choice,你可能想到应该有三种选择。但是,在使用一个choicegroup组件时,只有两个选项可用: exclusive和multiple。implicit类型不适用于choicegroup,就象对于list组件一样。在一个表单中不需要有一个象菜单的选项域(记住exclusive方式只允许一次选择一项;multiple方式则允许一次选择多个项)。

  第二个choicegroup构造器用于创建一个新的choicegroup对象,同时指明其标签和类型,还有一个字符串数组和一个图像数组来设置它的初始值。

  一旦你创建一个空的选择,你就可以插入,添加或替换其中的选项,就象在一个list组件上一样。而且,每一个选项有一个整数索引值来代表其在列表中的位置。第一个选项从0开始,最后一项索引值是该列表的最大长度减1。choicegroup 类提供了下面方法来完成这些操作。

public int append(string stringelement, image imageelement);
public void insert(int index, string stringelement, image imageelement);
public void set(int index, string stringelement, image imageelement);

  注意一个选项由一个字符串和一个可选的图像组成。如,下面代码演示了如何添加几个选项到前述的列表中。注意,方法append( )返回一个索引值(正是我们创建该项时指定给它的),以备后面之用。

int saveindex = list.append("save", null);
int deleteindex = list.append("delete", null);

  而且,你可以用下面方法从该选项组中删除任何索引:

public void delete(int index);
  如果你想检索任何索引指定的串元素或图像元素,可用下面方法:

public string getstring(int index);
public image getimage(int index);

  如果你想设置,取消设置,检索当前选项组中选择的索引,或者查询任何索引以确定它是否为当前选定的项,可以用下面方法:

public int getselectedindex( )
public boolean isselected(int index);
public setselectedindex(int index, boolean selected);

  最后,就象操作list组件一样,你可以使用一个布尔选项标志数组为设置整个选项组的选择状态。注意,getselectedflags( )方法并不返回一个布尔数组,而是修改一个已传入的布尔数组(并作为一种优化技术,返回以整数形式表示的被选取的元素的序号)。该数组的长度至少要等于该列表中元素数目,如果还长一些,其余的数组元素值被置为false。

public int getselectedflags(boolean[] selectedarray);
public void setselectedflags(boolean[] selectedarray);

  对于multiple型的列表,setselectedflags( )用于设置在列表中每个元素的状态。对于exclusive型的列表,布尔数组中只有一项可为true;如果没有为true的元素,则第一个元素被选中。如果有两个或者多个元素为true,系统选择第一个为true的元素并选择之。
下面语句创建一个新的空choicegroup对象,其标题为"selection",类型为exclusive:

choicegroup choices = new choicegroup("method of payment", choice.exclusive);
  下面代码把几个新的选项添加到选择组上。

choices.append("visa", null);
choices.append("master card", null);
choices.append("amex", null);

  类似于一个列表中的选项,在一个选项组中的项可以用插入,添加,删除等方法进行编辑。而且,每一个选项被其索引值所参照。如,下面一句可删除最后一项:

choices.delete(2);
  特别注意,一旦一个选项组被创建并投入使用,你不可能象操作列表一样,用setcurrent( )方法来显示之。一个选项组是item的子类,必须放置到表单上去,表单对象是可用方法setcurrent( )显示的。

form form = new form("choose one");
form.append(choices);
display.setcurrent(form);

  图 2展示了一种exclusive型的选项组,图3 展示了一种multiple型的选项组。注意,implicit值对于choicegroup类是不可用的;如果使用之,将显示一个illegalargumentexception异常。

java手机软件图形界面api之form相关api(图二)java手机软件图形界面api之form相关api(图三)
图2.一种互斥的选项组 图3.有多个选项的选项组

java手机软件图形界面api之form相关api(图四) [编辑:gigi_miao] [返回首页]
4. datefield

   一个datefield对象是一个可编辑的组件,它描述了可以显示在表单对象上的日历中的日期和时间信息。它可以用于显示日期或者时间信息,或者二者皆有。一个datefield对象可以用下面构造器创建:

public datefield(string label, int mode);
public datefield(string label, int mode, timezone timezone);

   第一个构造器用于创建有指定的标签和模式的datefield对象。这种模式可以通过提供一个静态字段(datefield.date,datefield.time或者datefield.date_time)来指定。datefield.date输入模式允许你设置日期信息,datefield.time则用于设置时间信息(小时和分钟),datefield.date_time用于设置日期和时间两种信息。

   datefield对象用下列方法来存取加到表单对象上的属性(记住标签属性在抽象类item 中定义):

public date getdate( )
public int getinputmode( )
public void setdate(date date);
public void setinputmode(int mode);

   而且,你可以用tostring( )方法来输出一个基于字符串的date或者time数据的拷贝。

public string tostring( );
   作为一个例子,下面代码创建一个对象,标签是"today’s date",方式为datefield.date:

datefield date = new datefield("today’s date", datefield.date);
   为了显示一个date域,可先创建一个form对象,然后使用它的方法append( )添加date域。

form form = new form("date info");
form.append(date);
display.setcurrent(form);

   在这个例子中,既然选择了date输入方式,midlet将显示一个项备用户选择,如图4示。一旦选择,它将显示当前的日历日期,你还可以设置一个新的日期。

java手机软件图形界面api之form相关api(图五)
图 4.一个描述日历上日期的date域


   如果使用了datefield.time输入方式,midlet将会显示
7. stringitem

   一个stringitem对象是一个文本组件,但是它包含的文本串不能被用户编辑。不过一个stringitem可以有一个被应用程序修改的标签,而且stringitem的内容也可以被应用程序编辑。下面是它的构造器:

public stringitem(string label, string contents);
   你可以容易地产生一个stringitem对象:

stringitem si = new stringitem("label", "contents");
   settext()和gettext( )方法用于设置和获取stringitem的内容;setlabel()和getlabel( )方法在抽象类item中定义,,用于设置和获取stringitem的标签:

public void settext(string s);
public void setlabel(string l);
public string gettext( );
public string getlabel( );

   下面代码创建一个stringitem 对象并把它放置于一个表单中。之后,该表单被置为当前screen,如图10所示。

java手机软件图形界面api之form相关api(图十)
图 10.用户不能编辑一个stringitem对象的内容


display display = display.getdisplay(this);
stringitem si = new stringitem("string item:/n", "hello world!");
form form = new form("greetings");
form.append(si);
display.setcurrent(form);

  8. textfield

   不象stringitem,一个textfield对象是一个可编辑的文本对象,它可以放置到表单上去。但是,同textbox一样,一个textfield有最大长度限制(存在该对象中的最大字符数)。同样,midp系统部分可以在最大尺寸上限定一个边界值,这可能比应用程序要求的要小。系统指定的最大值可以用方法getmaxsize()检索到。但是,如前所述,在sun公司的midp参考实现部分,方法getmaxsize( )返回应用程序所要求的尺寸。

   在你的midlet 程序需要用户输入信息时可以使用textfield对象。一个textfield对象可以以textfield类实例的形式创建,看下面的类构造器:

public textfield(string label, string text, int maxsize, int constraints);
   该可以用于创建一个新的textfield对象,在此要指定标签,初始化内容,最大字符数及constraints值。constraints字段用于限制用户的输入。字段constraints是textfield的静态常数,它们被与textbox一起共享使用,其值是:textfield.any,textfield.emailaddr,textfield.number,textfield.passwd,textfield.phonenumber和textfield.url。记住,如果你使用constraint的值不是textfield.any,textfield将执行一个简单的检验来确保输入的字符都是所要求的类型。

   如果你想设置或者检索当前正使用textfield的constraints值,可以用下面的方法:

public int getconstraints( );
public void setconstrants(int c);

   midp系统指定的最大尺寸可以用方法getmaxsize( )检索到,并可以用setmaxsize( )来重置。

public int getmaxsize( );
public void setmaxsize(int size);

   你可以用方法 setstring( )或getstring( )来设置或者检索textfield中所有的文本内容:

public string getstring( );
public void setstring(string s);

   另外,如果你想查看当前输入的字符数,可以用size( )方法,它返回一个整数值:

public int size( );
   用来删除,插入和替换当前文本的方法同textbox:

public void delete(int offset, int length);
public void insert(char[] data, int offset, int length, int position);
public void insert(string src, int position);
public void setchars(char[] data, int offset, int length);

   最后,如果你想找到插入点的位置,可以用下面方法:

public int getcaretposition( );
   下面代码显示该组件的作用。它用两个文本域(一个对应登录id,一个对应口令字)创建一个登录表单。程序运行后,你就可以输入你的用户名和口令,如图11.

java手机软件图形界面api之form相关api(图十二)
图 11.textfield的例子


display display = display.getdisplay(this);
textfield username = new textfield("loginid:", "", 10,textfield.any);
textfield password = new textfield("password:", "", 10,textfield.password);
form form = new form("sign in");
form.append(username);
form.append(password);
display.setcurrent(form);
java手机软件图形界面api之form相关api(图四) [编辑:gigi_miao] [返回首页]

扫描关注微信公众号