5

私は..ButtonFieldとBitmapFieldの処理方法Blackberry Stormの(タッチ)イベントをクリックしますか?

public class MyCanvas extends MainScreen implements FieldChangeListener 
    { 
    HorizontalFieldManager hfm; 
    private Bitmap startBitmap; 
    private BitmapField startBitmapField; 
    private ButtonField okButton; 

    MyCanvas() 
    { 
    hfm = new HorizontalFIeldManager(); 
    startBitmap = Bitmap.getBitmapResource("start.png"); 
    startBitmapField = new BitmapField(startBitmap); 
    startBitmapField.setChangeListener(this); 
    hfm.add(startBitmapField); 

    okButton = new ButtonField("Ok", ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY); 
    okButton.setChangeListener(this); 
    hfm.add(okButton); 
    } 

    public void fieldChanged(Field field, int context) 
    { 
    if(field == startBitmapField) 
    { 
     System.out.println("Touched START..."); 
    } 
    else if(field == okButton) 
    { 
     System.out.println("Touched Ok..."); 
    } 
    } 
} 

ようButtonField & BitmapFieldを作成している。しかしButtonFieldまたはBitmapFieldクリックは、ブラックベリー4.7シミュレータで何が起こっていません。

私はので、私はブラックベリーストームのためにButtonField & BitmapFieldのイベントを触れて/クリックし処理するためにどのようにブラックベリー4.7

を使用してmのブラックベリーストームのためにそれを構築したいですか?


私は..

protected boolean touchEvent(TouchEvent event) 
{ 
    switch(event.getEvent() ) 
    { 
    case TouchEvent.DOWN: ........ 
      return true; 
    case TouchEvent.MOVE: ....... 
          return true; 
    case TouchEvent.UP: ........ 
          return true; 

    case TouchEvent.CLICK: 
     if(deleteButton.isFocus()) 
     {    
     System.out.println("Touched DEL .........."); 
     } 
     else if(okButton.isFocus()) 
     {    
     System.out.println("Touched OK .........."); 
     } 
     else if(startBitmapField.isFocus()) 
     {    
     System.out.println("Touched START .........."); 
     }   
    return true; 
    } 
    return false; 
} 

が、毎回同じボタンがフォーカスを有するされて呼び出されると協力

okButtonField = new ButtonField("Ok", BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE); 

startBitmapField = new BitmapField(startBitmap, BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE); 

そのようButtonField & BitmapFieldsを作成mです。

「削除」ボタンをクリックしても「OK」ボタンがフォーカスされている場合は、「OK」ボタンが呼び出されます。

ボタンクリックのフォーカスを変更するにはどうすればよいですか? ButtonFieldまたはBitmapFieldをクリックしてフォーカスを取得する必要があることを意味しますか?

"button.isFocus()"のように "button.isClicked()"をチェックする方法はありますか?

答えて

5

最初に、画面にhfmを追加することを忘れないでください;
実際には、ボタンのクリックはうまく動作します。
ビットマップクリックを動作させるには、BitmapFieldのprotected boolean touchEvent(TouchEventメッセージ)を実装します。拡張クラスを作成する方が良いでしょう:

class MyCanvas extends MainScreen implements FieldChangeListener { 
    HorizontalFieldManager hfm; 
    private Bitmap startBitmap; 
    private BitmapField startBitmapField; 
    private ButtonField okButton; 
    private ButtonField cancelButton; 

    MyCanvas() { 
     hfm = new HorizontalFieldManager(); 
     add(hfm); 

     startBitmap = Bitmap.getBitmapResource("start.png"); 
     startBitmapField = new TouchBitmapField(startBitmap); 
     startBitmapField.setChangeListener(this); 
     hfm.add(startBitmapField); 

     okButton = new ButtonField("Ok", ButtonField.CONSUME_CLICK 
       | ButtonField.NEVER_DIRTY); 
     okButton.setChangeListener(this); 
     hfm.add(okButton); 

     cancelButton = new ButtonField("Cancel", ButtonField.CONSUME_CLICK 
       | ButtonField.NEVER_DIRTY); 
     cancelButton.setChangeListener(this); 
     hfm.add(cancelButton); 
    } 

    public void fieldChanged(Field field, int context) { 
     if (field == startBitmapField) { 
      System.out.println("Touched START..."); 
     } else if (field == okButton) { 
      System.out.println("Touched Ok..."); 
     } else if (field == cancelButton) { 
      System.out.println("Touched Cancel..."); 
     } 
    } 
} 

class TouchBitmapField extends BitmapField { 
    public TouchBitmapField(Bitmap startBitmap) { 
     super(startBitmap); 
    } 

    protected boolean touchEvent(TouchEvent message) { 
     if (TouchEvent.CLICK == message.getEvent()) { 
      FieldChangeListener listener = getChangeListener(); 
      if (null != listener) 
       listener.fieldChanged(this, 1); 
     } 
     return super.touchEvent(message); 
    } 
} 
+0

はい。私は画面にhfmを追加しました。実際には2つのボタンがあります。そのクリックイベントを処理する方法。今、私はbutton.setChangeListener(this)&上記のコードとしてfieldChanged()メソッドをオーバーライドしています。しかし効果はありません。だから2つのボタンのタッチイベントを処理する方法は? bitmapFieldsのurコードを試してみます。 – Shreyas

+0

Shreyas、もう1つのボタンでコードを更新しましたが、まだ動作しています...別のものに依存するのでしょうか?それを確認してください。まだ動作していない場合は、完全なコードを投稿して把握してください。 –

+0

Simulator 4.7.0.41でButtonFieldsとBitmapFieldsに触れることができますか? – Shreyas

関連する問題