识别bb中按下了哪个键

时间:2011-06-30 11:01:10

标签: blackberry keypress

我正在尝试识别按下了哪个键并按要求执行操作。基本上使用它们在按下“i”n“o”时进行放大n缩小。

我使用过这些方法:

protected boolean keyDown(int keycode, int time)
{           
    int key=Keypad.key(keycode);
    String keyC=Integer.toString(key);
    System.out.println("*********************************   key pressed"+key);
    System.out.println("*********************************   key pressed to string"+keyC);
    return super.keyDown(keycode, time);
}

public boolean keyChar(char key, int status, int time) 
{
    System.out.println("inside keychar");
    boolean retval = false;
    int zoom=mapField.mf.getZoom();
    if(key== 'o'||key== 'O')
    {
        zoom=zoom-3;
        mapField.mf.setZoom(zoom);

        retval = true;
    }
    super.mf.setZoom(zoom);
    return retval;
}

这些方法似乎根本不起作用。

1 个答案:

答案 0 :(得分:0)

好的,让我告诉你我将如何做到这一点,并希望在某个地方会有一个aha时刻。

    import net.rim.device.api.system.KeyListener;
    import net.rim.device.api.ui.Keypad;
    // any other imports you might need

    public final class VivartClass implements KeyListener {

    public boolean keyChar(char key, int status, int time) 
        {
            System.out.println("inside keychar");
            if(key== 'o'||key== 'O')
            {
                int zoom=mapField.mf.getZoom();
                zoom=zoom-3;
                mapField.mf.setZoom(zoom);
                super.mf.setZoom(zoom);
                return true;


            }
            return super.keyChar(key, status, time);
       }

       protected boolean keyDown(int keycode, int time) {

            int key=Keypad.key(keycode);
            String keyC=Integer.toString(key);
            System.out.println("*********************************   key pressed"+key);
            System.out.println("*********************************   key pressed to string"+keyC);
            return super.keyDown(keycode, time);
        }

        }

然后在您的应用程序构造函数

        public Application() {
            addKeyListener(new VivartClass());
            // all your other stuff you may want to do
    }

“应该使用keyChar通知来确定用户按下哪些字符”是www.blackberry.com在其API中的推荐。

另外,请确保代码中的其他位置没有其他keyChar方法。如果有,那么你期望被调用的那个就不会被调用。

而不是键=='o'尝试使用net.rim.device.api.system.Characters中的一些值来查看是否有可以获取的某些键,例如

key == Characters.LATIN_SMALL_LETTER_O 

哦,最后一次尝试。你可以看看是否

Keypad.getAltedChar(key) == 'o'

也改善了你的状况。

抱歉,我现在面前既没有模拟器也没有设备,所以我不能和你一起运行这些设备,但希望我能解决其中一个问题。