创建列表框
使用列表框可显示用户可从中选择一个或多个值的列表。
1. 导入以下类:
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import java.util.Vector;
2. 通过扩展 UiApplication 类来创建应用程序框架。 在 main() 中,创建新类的实例并调用 enterEventDispatcher(),
以启用应用程序来接收事件。 在构造器中,调用 pushScreen 以显示应用程序的自定义屏幕。
CreateMenuScreen 类表示自定义屏幕(在步骤 3 中介绍)。
public class ListFields extends UiApplication
{
public static void main(String[] args)
{
ListFields theApp = new ListFields();
theApp.enterEventDispatcher();
}
public ListFields()
{
pushScreen(new ListFieldScreen());
}
}
3. 通过扩展 MainScreen 类来创建应用程序的自定义屏幕。 在构造器中,调用 setTitle() 以显示屏幕的标题。
调用 add() 以在屏幕上显示文本字段。 调用 addMenuItem() 以将菜单项添加至 MainScreen 创建的菜单。
class ListFieldScreen extends MainScreen
{
private ListField _listField;
private Vector _listElements;
public ListFieldScreen()
{
setTitle("List Field Sample");
}
}
4. 在屏幕构造器中,创建列表框。 使用 Vector 类创建要添加至列表框的项目数组。 使用 ListField() 类创建列表框。
调用 add() 以将列表框添加至屏幕。 调用步骤 4 中介绍的 initializeList() 以构建列表框。
_listElements = new Vector();
_listField = new ListField();
ListCallback _callback = new ListCallback();
_listField.setCallback(_callback);
add(_listField);
initializeList();
5. 使用 String 对象创建一个方法,以指定要显示在列表框中的项目。 调用 addElement() 以将项目添加至列表。
调用 setSize() 以指定列表框中的项目数。
private void initializeList()
{
String itemOne = "List item one";
String itemTwo = "List item two";
_listElements.addElement(itemOne);
_listElements.addElement(itemTwo);
reloadList();
}
private void reloadList()
{
_listField.setSize(_listElements.size());
}
6. 创建实施 ListFieldCallback 接口的类。 实施 drawListRow() 以将列表框项目添加至屏幕。
实施 get() 以返回位于指定索引的列表框项目。 实施 indexOfList() 以返回指定字符串的第一个匹配项。
实施 getPreferredWidth() 以检索列表框的宽度。
private class ListCallback implements ListFieldCallback
{
// 将列表框添加至屏幕
public void drawListRow(ListField list, Graphics g, int index, int y, int w)
{
String text = (String)_listElements.elementAt(index);
g.drawText(text, 0, y, 0, w);
}
//返回位于指定索引的列表项目
public Object get(ListField list, int index)
{
return _listElements.elementAt(index);
}
//返回指定字符串的第一个匹配项
public int indexOfList(ListField list, String prefix, int string)
{
return _listElements.indexOf(prefix, string);
}
//检索列表框的宽度
public int getPreferredWidth(ListField list)
{
return Display.getWidth();
}
}