J2ME自己画界面--List的实现(二)
2007-9-3 9:43:11
书接上回,还记得我们上次讲的如何自己定制一套菜单框架吗?忘记了啊,点这里可以看一下~
其实在写这个List前我做了一个Table,只不过目前没有实现完,我觉得List更简单一些,就先吧List实现了。
这次我们要利用这个Form结构来实现一个自己的List,有朋友说了J2ME自己不是提供了 List 控件了吗? 对的,是提供了,但是功能我认为还不够强大,而且不能结合这个菜单显示,自己动手丰衣足食啊。还是自己画吧~
我们这个List取名为KList区别与系统自身的List.
在画这个List前,要解决一个事情,就是滚动条的问题。我们这里只解决垂直滚动条(水平滚动条我也实现了,不过我觉得List没有必要放置一个水平滚动条吧,手机屏幕那么小,太乱了,你觉得呢?)。
根据当前工作区的高度,以及每个列要显示的高度,来计算一个屏幕显示多个个item,然后来算出滚动条的位置,通过捕获UP,DOWN键事件来移动元素和滚动条。
我们定义这个KList拓展自FormCanvas类。每个Item可以放置Object类型,除了Image类型外,其它类型要实现toString()方法。他自身提供了OnSelectedItem事件和获得当前选中项,以及界面美工相关方法。
下面是截图:
(图一:选中第12个元素(数组是从0开始的啊))
 (图二:通过预先注册的事件来获得确认操作)

(图三:看看这个菜单)

(图四:Item带Icon和第3个Item是图片)

如何使用呢?
首先产生一个KList对象,然后向里面扔MenuBar对象,和注册OnSelectedListener事件,数据用KListeItem表示。就可以了。
调用代码:
this.klist = new KList(); tabBar = new MenuBar(); tabLabel = new Component("后退"); tabMenu = new Menu("菜单"); tabMenu.addItem(new MenuItem("开始")); tabMenu.addItem(new MenuItem("产看详细")); tabMenu.addSeparator(); tabMenu.addItem(new MenuItem("删除")); tabBar.setLabel(tabLabel); tabBar.setMenu(tabMenu); klist.setFullScreenMode(true); klist.setMenuBar(tabBar); KListItem[] items = new KListItem[20]; for(int i=0;i<items.length;i++) { items[i]=new KListItem(); items[i].setValue("你的列表_"+i); } klist.setHeader(header); klist.setItems(items); klist.setOnSelectedItem(new IListItemListener(){ public void actionPerformed(IListItemEvent e) { alert.setString("当前选中ListeItem="+e.getItem().getValue().toString()); display.setCurrent(alert); }});
这个调用非常简单了吧,像Swing吧。哈哈 使用起来非常简单。尽量符合Swing的开发模式。
好了,下一节讲述Calendar工具。呵呵,还没有做呢,有时间再搞吧。
上一节:自己定制自己的带菜单的Form。
|