2011-06-30 71 views
-1

我試圖識別哪個鍵被按下並根據需要執行操作。基本上使用它們在按下「i」n「o」按鈕時縮小n倍。識別在bb中按哪個鍵

我已經使用了這些方法:

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; 
} 

這些方法似乎沒有在所有的工作。

+0

通過不工作你的意思是說,這兩種方法從來沒有被調用,或者是否有一些其他錯誤,你正在得到?另外,你可以發佈這個代碼所在的類嗎?看看你是否使用KeyListener這樣的事情對於看到什麼是錯誤很重要。 – demongolem

+0

是的,他們從未被召喚過。我發現了錯誤。這是因爲這些方法都在內部類中,一旦我直接將它們放在屏幕上,它就開始工作。 我仍然需要知道如何從任何按下的鍵獲取代碼或字符。應該有一種方法...我失蹤的東西? – BerryQuest

回答

0

好吧,讓我給你我將如何去做,希望會有一個地方的時間。

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' 

也改善你的情況。

對不起,我目前既沒有模擬器也沒有設備在我面前,所以我無法與你一起運行,但希望我已經在其中一個問題上遇到了問題。