日期:2014-05-20  浏览次数:20705 次

大家看看这一行是干什么的---List的使用
其中commsndAction中开头是这样的:
public   void   commandAction(Command   c,   Displayable   d)   {
                if   (d.equals(menuList))   {
                        if   (c   ==   List.SELECT_COMMAND)   {
                        int   select   =   ((List)d).getSelectedIndex();     //得到//选中的菜单项
                        switch(select)   {
                        case   0:
                        canvas.drawLine();     //   绘制直线
                        display.setCurrent(canvas);
                        break;


//我不理解int   select   =   ((List)d).getSelectedIndex();是怎么回事,特别是((List)d).
getSelectedIndex()又究竟是怎么回事?

------解决方案--------------------
其实d是一个List,但是它却被Displayable引用,所以如果不强制转换为List,就无法使用List的getSelectedIndex方法.
------解决方案--------------------
((List)d)是将Displayable类型的参数强制转换成List类型,也就是上塑造型.getSelectedIndex()是List类型的一个方法,是获得当前选项的索引号.
------解决方案--------------------
把监听对象Displayable强制转换成List然后取得其被选种的下标值,再进行switch操作~
------解决方案--------------------
commandAction(Command c, Displayable d),
当高级事件发生的时候(具体是命令键被按下还是松开的时候,API文档当中没有说明,个人感觉是命令键被按下的时候,因为你按下一直不松开命令会被响应处理),这个方法会接收到两个系统传递过来的参数,第一个是Command类型的,保存在c中,它表示用户按下的命令是谁,第二个是Displayable类型的保存在d当中,它表示用户在哪个 可显示对象 里面触发了高级事件.因为LCDUI当中 有很多个 可显示对象 都可以触发/监听 commandAction动作,所以为了通用性,API用这些 可显示对象 的 父类实例 来进行传递,所以你在做其他操作之前需要把 父类对象 还原成 子类对象 ,然后再做其他的事情,这样才能对应执行 子类对象 的(真正触发了高级事件的对象)方法.