2012-07-02 97 views
-1

我有一個自定義的EDITFIELD黑莓EditField中的錯誤

public class Custom_EditField extends EditField { 
int width, row; 

Custom_EditField(long style, int width, int row) { 
    super(style); 
    this.width = width; 
    this.row = row; 
} 

protected void layout(int width, int height) { 
    width = this.width; 
    height = this.row; 
    super.layout(width, Font.getDefault().getHeight() * row); 
    super.setExtent(width, Font.getDefault().getHeight() * row); 
} 

public int getPreferredHeight() { 
    return Font.getDefault().getHeight() * row; 
} 

public int getPreferredWidth() { 
    return width; 
} 

public void paint(Graphics graphics) { 
    super.paint(graphics); 
    graphics.setBackgroundColor(Color.GRAY); 
    graphics.clear(); 
    graphics.setColor(Color.BLACK); 
    int labelWidth = getFont().getAdvance(getLabel()); 
    graphics.drawRect(labelWidth, 0, getWidth() - labelWidth, getHeight()); 
    graphics.drawText(this.getText(), 0, 0); 
} 
} 

當我在EditField中鍵入完整行字,就會造成和錯誤。它似乎不能自動轉到下一行。

+1

「它會導致一個錯誤」,你可以解釋你得到哪些錯誤?另外[SSCCE](http://pscode.org/sscce.html)會有所幫助。 – Howard

+0

'0:21:21.476:應用程序錯誤104 0:21:21.478:Uncaught:StackOverflowError' –

回答

1

BlackBerry UI中佈局方法的參數是最大值,您的自定義代碼在設置字段範圍時不會嘗試遵守這些最大值。這會導致佈局出現問題。另外,paint()方法不是修改文本字段圖形的最佳位置,因爲它不理解文本換行。如果你想改變文本的繪製方式,但是在完成包裝之後,你想重寫drawText。

這大約是你想要的,但你需要做一些更多的調整,使其工作你期望的方式:

protected void layout(int maxWidth, int maxHeight) { 
    super.layout(maxWidth, Math.min(maxHeight, Font.getDefault().getHeight() * row)); 
    super.setExtent(maxWidth, Math.min(maxHeight, Font.getDefault().getHeight() * row)); 
} 

public int drawText(Graphics graphics, 
       int offset, 
       int length, 
       int x, 
       int y, 
       DrawTextParam drawTextParam) { 
    graphics.setBackgroundColor(Color.GRAY); 
    graphics.clear(); 
    graphics.setColor(Color.BLACK); 
    int labelWidth = getFont().getAdvance(getLabel()); 
    graphics.drawRect(labelWidth, 0, getWidth() - labelWidth, getHeight()); 
    graphics.drawText(this.getText().substring(offset, offset + length), x, y); 
} 
+0

繪製文本返回什麼? –

+0

'0:21:21.476:應用程序錯誤104 0:21:21.478:Uncaught:StackOverflowError' –