Распознать, какая клавиша нажата в BB - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь распознать, какая клавиша нажата, и выполнить необходимое действие.В основном, используя их для выполнения увеличения масштаба изображения, нажмите и удерживайте нажатой клавишу «i» n «o».

Я использовал следующие методы:

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 голосов
/ 08 июля 2011

Хорошо, позвольте мне рассказать вам, как я это сделаю, и, надеюсь, где-то наступит момент ага.

    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. Персонажи, чтобы увидеть, есть ли какие-нибудь ключи, которые вы можете получить, например

key == Characters.LATIN_SMALL_LETTER_O 

О, последняя попытка.Вы можете увидеть, улучшит ли

Keypad.getAltedChar(key) == 'o'

и вашу ситуацию.

Извините, у меня нет ни симулятора, ни устройства передо мной, поэтому я не могу запустить их с вами, нонадеюсь, я столкнулся с проблемой с одним из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...