2012-07-12 16 views
1

我正在使用先進的用戶界面的例子圖按鈕場。 默認情況下,沒有一種方法是工作在5.0 JRE禁用按鈕, ,所以我已經添加了下面的代碼爲禁用和 然後禁用按鈕的功能是工作,但setchangelistener不工作 這是我的問題 ..這裏是我的代碼,我添加了禁用按鈕..請檢查。我是否需要在invoke action方法中改變任何東西?如何禁用高級UI的例子使用bitmapbuttonfield按鈕黑莓

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

你的代碼被註釋掉了(我想這是不是在程序的方式,但它仍然會傷害我的眼睛),和你的'getEnabled()'方法被命名爲'的setEnabled()'。你沒有顯示任何'setChangeListener()'代碼,所以我們看不到它是如何使用的。如果你想讓我們看看它有什麼問題,請補充一點。謝謝。 – Nate 2012-07-12 10:40:43

+0

嗨Nate ..如果我添加了代碼。在我的班級裏button.setchange監聽器不工作 – user1427659 2012-07-13 07:00:48

+0

https://github.com/blackberry/Samples-for-Java/blob/master/Advanced%20UI/src/com/samples/toolkit/ui/component/BaseButtonField.java – user1427659 2012-07-13 07:01:09

回答

1

這裏是discussion on the BlackBerry forums about this

我有時所做的實際上是利用Field對象上的isEditable()屬性,因爲可編輯性和啓用都有些類似的概念。如果你真的想保留單獨的isDisabled()代碼,那很好。剛剛替補,下面,我用isEditable()(記住扭轉布爾...這是一個原因,總是計劃肯定...讓你的方法,而不是isEnabled()isDisabled())。

所以,不是任何你上面貼的代碼,我只想補充這段代碼要麼BitmapButtonField,或BaseButtonField

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值當按鈕被禁用。你沒有提到,所以如果你不喜歡它,你一定可以拿出來。