如何在黑莓中获得焦点

时间:2011-06-17 12:38:28

标签: blackberry java-me

您好先生,我正在制作一个应用程序,我遇到了问题请帮助我...

在一个页面中即时从服务器获取数据并在页面上显示该数据现在我使用Focusable来突出显示它们......现在我的要求是当焦点出现在任何数据上时它应该改变字段即例如:打印焦点所在的名称..

以下是显示页面上数据的代码,现在它正在进行字段更改,我需要点击标签字段....

package com.Tally.app;

import com.Tally.screenParams.BankList;
import com.Tally.screenParams.CrDrList;
import com.Tally.screenParams.SearchList;

import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Menu;

import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.BackgroundFactory;

public class LowerCreditors extends VerticalFieldManager implements
        FieldChangeListener {
    // class Lower extends

    static LabelField[] CrDrLabels;

    public LowerCreditors() throws Exception {

        super(VerticalFieldManager.VERTICAL_SCROLL);

        CrDrLabels = new LabelField[CrDrList.VendorNameArr.length];

        for (int i = 0; i < CrDrLabels.length; i++) {
            final int t = i;

            VerticalFieldManager hfm = new VerticalFieldManager(USE_ALL_WIDTH) {

                protected void sublayout(int Width, int Height) {

                    // TODO Auto-generated method stub

                    super.sublayout(Width, Height);

                    setPositionChild(getField(0), 15, 0);

                    setPositionChild(getField(1), Display.getWidth()
                            - getFont().getAdvance(CrDrList.VendorValArr[t])
                            - 10, 0);
                }
            };

            CrDrLabels[i] = new LabelField(CrDrList.VendorNameArr[i],
                    LabelField.FOCUSABLE ) {


                 public int getPreferredWidth()
                   {
                       return 210; // fix width
                   }




                protected boolean navigationClick(int status, int time) {


                    fieldChanged(this, 0);
                    return true;
                };
            };


            LabelField Value = new LabelField(CrDrList.VendorValArr[i]);

            hfm.add(CrDrLabels[i]);
            hfm.add(Value);

            add(hfm);


        }



    }

    protected void paintBackground(Graphics g) {
        // TODO Auto-generated method stub
        g.setColor(0xB8E0B8);

        g.fillRect(0, 0, net.rim.device.api.system.Display.getWidth(),
                net.rim.device.api.system.Display.getHeight() + 2000);
        g.setColor(Color.BLUE);
        super.paintBackground(g);
    }

    protected void paint(Graphics graphics) {
        graphics.setColor(0xB8E0B8);
        graphics.fillRect(0, 0, Display.getWidth(), 20);
        graphics.setColor(Color.BLACK);
        super.paint(graphics);
    }

    protected void sublayout(int maxWidth, int maxHeight) {
        // TODO Auto-generated method stub

        setExtent(net.rim.device.api.system.Display.getWidth(),
                net.rim.device.api.system.Display.getHeight());
        super.sublayout(net.rim.device.api.system.Display.getWidth(),
                net.rim.device.api.system.Display.getHeight());

    }

    public void fieldChanged1(Field field, int context) {
        // TODO Auto-generated method stub

    }


    protected boolean abc(int status, int time) {

        navigationClick(1, 1);

        Dialog.alert("Called......");
            return false;

    }


    public void fieldChanged(Field field, int context) {

        // TODO Auto-generated method stub
        for (int i = 0; i < CrDrList.VendorNameArr.length; i++) {

            if (field == CrDrLabels[i]) {



                String LN = CrDrLabels[i].getText();
                // SearchList.cname=cn;
                CrDrList.cname1 = LN;

                LabelField cname1 = CrDrLabels[i];
                System.out.println("cnnnnnnnnnnnnnn : "+ cname1);
                CrDrList.selLad = CrDrLabels[i];
                System.out.println("Creddddddddddddddrrrrrrr"+CrDrList.selLad);

                abc(i, i);

            }

        }
    }
}

等待回复..

2 个答案:

答案 0 :(得分:2)

你可以做的事情:

  1. 您可以在每个字段上设置FocusChangeListener,并执行focusChanged()方法中的所有操作。
  2. 使用getFieldWithFocus()getLeafWithFocus()
  3. 覆盖每个LabelField的onFocus()方法
  4. 编辑评论

    覆盖LabelField上的onFocus()。只需将其添加到您要覆盖的其他方法中:

    protected void onFocus(int direction) {
        //do things that need done when the label gets focus
    }
    

    如果在失去焦点时需要做某事

    protected void onUnfocus() {
        //do things that need done when the label loses focus
    }
    

答案 1 :(得分:0)

在导航动作上试试这个。

protected boolean navigationMovement(int dx, int dy, int status, int time){
    System.out.println("field name with focus is...."+getLeafFieldWithFocus());
return super.navigationMovement(dx,dy,status,time);
}
相关问题