如何在黑莓中更改焦点上的字段

时间:2011-06-21 10:52:39

标签: blackberry java-me

你好先生我试过这样做但事情是我在数组中获取数据而不是单个数据...我希望一旦它专注于那个就一个接一个地显示数据....这里的代码和结果....

protected boolean navigationMovement(int dx, int dy, int status, int time) {
        for (int i = 0; i < CrDrLabels.length; i++) {


            Field field = CrDrLabels[i];

            System.out.println("hhhhhhhhhhhhhhhh::::" + CrDrLabels[i]);

            if (field.isFocus() == true) {


                // get object for next field in focus order

                field = (i == (getFieldCount() - 1)) ? CrDrLabels(0): CrDrLabels(i + 1);

                CrDrLabels[i].setFocus();

                //break;
            }
        }
        return false;

    }

    private Field CrDrLabels(int i) {
        // TODO Auto-generated method stub
        return null;
    }

结果........

hhhhhhhhhhhhhhhh::::KV10
hhhhhhhhhhhhhhhh::::FV6
hhhhhhhhhhhhhhhh::::HV8
hhhhhhhhhhhhhhhh::::NV12
hhhhhhhhhhhhhhhh::::OV15
hhhhhhhhhhhhhhhh::::JV9
hhhhhhhhhhhhhhhh::::DV5
hhhhhhhhhhhhhhhh::::PV16
hhhhhhhhhhhhhhhh::::Vendor1
hhhhhhhhhhhhhhhh::::New Info Systems
hhhhhhhhhhhhhhhh::::MV14
hhhhhhhhhhhhhhhh::::PV4
hhhhhhhhhhhhhhhh::::Tv23
hhhhhhhhhhhhhhhh::::Vendor4
hhhhhhhhhhhhhhhh::::Vendor5
hhhhhhhhhhhhhhhh::::
hhhhhhhhhhhhhhhh::::

我希望如果专注于任何一个,它应该只显示那些数据,并且我可以对所选数据执行事件....因为我们在任何手机中进行消息传递......

请给我一些代码如何解决这个问题...

1 个答案:

答案 0 :(得分:1)

这一行:field = (i == (getFieldCount() - 1)) ? CrDrLabels(0): CrDrLabels(i + 1)让我感到困惑,因为您的CrDrLabels(int)方法只返回null。确保您不要使用数组访问器([])。另外,除非你覆盖了CrDrLabel类的toString()方法,否则当你System.out.println()时它会得到奇怪的输出。

最简单的方法就是覆盖CrDrLabel的onFocus()方法,以便在获得焦点时执行所需的任何操作。

编辑评论:

我会写这个,好像你的CrDrLabel是LabelFields。创建它们时,请执行以下操作:

CrDrLabels[x] = new LabelField(theText) {
    protected void onFocus(int direction) {
        //do your work here 

        //and be sure to call super.onFocus()
        super.onFocus(direction);
    }
}