如何在blackberry的高级ui示例中使用位图按钮字段禁用按钮



我在高级ui示例中使用位图按钮字段。默认情况下,在5.0 jre中没有任何方法可以禁用该按钮,因此,我添加了以下禁用和则禁用该按钮的功能起作用,但setchangelistener不起作用那是我的问题..这是我为禁用按钮添加的代码。。请查收。我需要更改invoke操作方法中的任何内容吗?

 public boolean isDisable() {
   return isDisable;
 }
 public void setDisable(boolean isDisable) {
   this.isDisable = isDisable;
 invalidate();
 }
 public boolean isFocusable() {
   return isFocusable && !isDisable;
 }
 public void setFocusable(boolean isFocusable) {
 this.isFocusable = isFocusable;
 }
 protected boolean invokeAction(int action) {
   if (!isDisable){
    fieldChangeNotify(0);
   }
       return true;
 }
 public boolean setEnabled() {
   return false;
 }

以下是BlackBerry论坛上关于此问题的讨论。

我有时所做的实际上是在Field对象上使用isEditable()属性,因为可编辑性和启用是有点相似的概念。如果您真的想保留单独的isDisabled()代码,那没关系。只需替换下面我使用isEditable()的地方(记住反转布尔值…这是总是以肯定的方式编程的原因之一…使您的方法isEnabled()而不是isDisabled())。

因此,与您上面发布的任何代码不同,我只想将此代码添加到BitmapButtonFieldBaseButtonField:中

public boolean isFocusable() {
   return isEditable() && super.isFocusable();
}

这在BitmapButtonField:中

protected void paint( Graphics g ) {
   int oldAlpha = g.getGlobalAlpha();
   int index = g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS ) ? FOCUS : NORMAL;
   if (!isEditable()) {
      g.setGlobalAlpha(100);  // alpha is 0 to 255, so this is 100/255
   }
   g.drawBitmap( 0, 0, _bitmaps[index].getWidth(), _bitmaps[index].getHeight(), _bitmaps[index], 0, 0 );
   g.setGlobalAlpha(oldAlpha);
}

然后,我可以设置一个更改侦听器,或者禁用按钮,就像在我的管理器类中这样:

  BitmapButtonField btn = 
     new BitmapButtonField(Bitmap.getBitmapResource("button.png"),
                           Bitmap.getBitmapResource("button-lit.png"));
  btn.setChangeListener(new FieldChangeListener() {
     public void fieldChanged(Field field, int context) {
        Dialog.alert("Button clicked!");
     }         
  });
  btn.setEditable(false);   // this disables the button
  add(btn);

但是,请理解,如果禁用按钮,就意味着您的更改侦听器不会被调用。这就是它应该如何工作。只有当按钮已启用并且因此可以单击时,才会调用更改侦听器。

此外,请注意,为了使按钮在禁用时看起来不同(不可编辑),我会在禁用按钮时覆盖paint()以设置不同的alpha值。你没有提到,所以如果你不喜欢,你当然可以把它拿出来。

最新更新