2009-06-02 9 views
3

ブラックベリーキーボードのDeleteキーを検出して無効にしようとしています。何らかの理由でFieldサブクラスで「削除」キーを検出するにはどうすればよいですか?

、それは、その点に当たったときのように私のcase文の内側にそれを作ることはありません:

Keypad.key(keycode) == 8 
Keypad.KEY_DELETE == 127 

私のエラーは何ですか?

public class MyField extends ListField implements KeyListener { 
// ... 
/** Implementation of KeyListener.keyDown */ 
public boolean keyDown(int keycode, int time) { 
    boolean retval = false; 
    switch (Keypad.key(keycode)) { 
    /* DELETE - Delete the timer */ 
    case Keypad.KEY_DELETE: 
     if (Keypad.status(keycode) == KeyListener.STATUS_SHIFT) { 
      _myDeleteCmd.run(); 
      retval = true; 
     } 
     break; 

    default: 
     retval = super.keyDown(keycode, time); 
    } 
    return retval; 
} 

答えて

3

このフィールドに到達する前に、別のKeyListener.keyDown関数によってキーイベントが消費されている可能性があります。 keyDown()実装内のブレークポイントを設定して、アプリケーションがこの点に到達したことを確認することで、これを簡単にテストできます。

キーイベントを消費するには、KeyListener関数はtrueを返す必要があります。他のkeyDown実装では、デフォルトでtrueを返さないようにして、各実装が使用するキーのみを確実に使用するようにしてください。

+0

そこに、それを行った。質問に関連する値を追加しました。ねえ、私たちはそれにいる間、誰がイベントで最初に撃たれるの?システム - >アプリケーション - >画面 - >マネージャ - >フィールド? – MikeyB

+1

Keypad.KEY_BACKSPACE = 8;それはあなたがチェックする必要がある値です。私は2つの違いは分かりませんが、しばしば一緒にケースに入れられます。 注文の100%ではありません。私はあなたが正しいと信じています。アプリケーションには、アクティブな画面にイベントをディスパッチするイベントディスパッチャがあり、画面のマネージャとフィールドにディスパッチします。しかし、私はその時点で注文については確信しています。私はそれが画面に追加された順番で各マネージャを通過し、各マネージャのフィールドについても同じであると推測します。 – Fostah

+0

ああ...バックスペース、削除ではありません。ありがとう!ありがとう! – MikeyB

関連する問題