Java 在BlackBerry上自定义listfield项

Java 在BlackBerry上自定义listfield项,java,blackberry,Java,Blackberry,我有一个简单的列表字段类,当我选择一个特定的列表项时,它会显示默认菜单。我想自定义listfield项,这样当选择一个项时,一个新屏幕就会被推到堆栈上。我正在重写trackwheeel()方法,但无法使其工作 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.contai

我有一个简单的列表字段类,当我选择一个特定的列表项时,它会显示默认菜单。我想自定义listfield项,这样当选择一个项时,一个新屏幕就会被推到堆栈上。我正在重写trackwheeel()方法,但无法使其工作

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;



public class TeamListScreen extends UiApplication
{
     public static void main(String[] args)
     {
      TeamListScreen theApp = new TeamListScreen();
         theApp.enterEventDispatcher();
     }
     public TeamListScreen()
     {
         pushScreen(new ListFieldScreen());
     }
} 

class ListFieldScreen extends MainScreen
{
    private ListField _listField;
    private Vector _listElements;
    int listFieldIndex = -1;

    public ListFieldScreen() 
    {
        setTitle("List Field Sample");

_listElements = new Vector(); 
_listField = new ListField();
ListCallback _callback = new ListCallback();
_listField.setCallback(_callback);
_listField.setRowHeight(45);
//_listField.setChangeListener(this);
add(_listField);
initializeList();
_listField = new ListField(_listElements.size()) {

 protected void drawFocus(Graphics graphics, boolean on) {
 }

 protected boolean trackwheelClick(int status, int time) {

  listFieldIndex = _listField.getSelectedIndex();

  if (listFieldIndex < 0) {
   listFieldIndex = 0;

  }
  try {
   UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
     UiApplication.getUiApplication().pushScreen(new LiveScreen());
     // UiApplication.getUiApplication().popScreen(getActiveScreen());
    }
   });
  } catch (Exception e) {
  }
  return true;
 }

};


}

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());
}

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(); 
    } 
}
}
导入net.rim.device.api.system.*;
导入net.rim.device.api.ui.*;
导入net.rim.device.api.ui.component.*;
导入net.rim.device.api.ui.container.*;
导入java.util.Vector;
公共类TeamListScreen扩展了UIC应用程序
{
公共静态void main(字符串[]args)
{
TeamListScreen theApp=新建TeamListScreen();
theApp.enterEventDispatcher();
}
公共团队列表屏幕()
{
推屏(新ListFieldScreen());
}
} 
类ListFieldScreen扩展了MainScreen
{
私有列表字段_ListField;
私有向量列表元素;
int listFieldIndex=-1;
公共列表字段屏幕()
{
setTitle(“列表字段样本”);
_listElements=新向量();
_listField=新listField();
ListCallback _callback=新建ListCallback();
_setCallback(_callback);
_listField.setRowHeight(45);
//_setChangeListener(这个);
添加(_listField);
初始化列表();
_listField=新的listField(\u listElements.size()){
受保护的void drawFocus(图形,布尔打开){
}
受保护的布尔trackwheelClick(整数状态,整数时间){
listFieldIndex=\u listField.getSelectedIndex();
如果(listFieldIndex<0){
listFieldIndex=0;
}
试一试{
UiApplication.getUiApplication().invokeLater(新的Runnable()){
公开募捐{
UiApplication.getUiApplication().pushScreen(新的LiveScreen());
//UiApplication.getUiApplication().popScreen(getActiveScreen());
}
});
}捕获(例外e){
}
返回true;
}
};
}
私有无效初始值列表()
{
String itemOne=“列出项目一”;
String itemTwo=“列出第二项”;
_列表元素。附加元素(项目一);
_列表元素。附加元素(第二项);
重载列表();
}
私有void重载列表()
{
_setSize(_listElements.size());
}
私有类ListCallback实现ListFieldCallback
{
public void drawListRow(列表字段列表、图形g、整数索引、整数y、整数w)
{ 
String text=(String)\u liselements.elementAt(index);
g、 drawText(文本,0,y,0,w);
} 
公共对象获取(列表字段列表,int索引)
{
return _listElements.elementAt(索引);
} 
public int indexOfList(列表字段列表、字符串前缀、int字符串)
{ 
return _liselements.indexOf(前缀,字符串);
} 
public int getPreferredWidth(列表字段列表)
{ 
返回Display.getWidth();
} 
}
}
不推荐使用trackwheelClick()函数,应改用navigationClick()。 顺便说一句,您不需要使用UiApplication.getUiApplication().invokeLater,因为它已经在事件队列中运行