2011-02-17 75 views
0

下面的類擴展了labelfield,但是當我顯示大量文本時,它不會換行到新行。文本僅在屏幕上顯示。當我使用LabelField時,文本會打包。我是否需要更新繪畫方法?Labelfield文本不包裝

感謝

import net.rim.device.api.ui.DrawStyle; 
import net.rim.device.api.ui.Font; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.component.LabelField; 

public class FCLabelField extends LabelField { 

    private Object text; 
    private Font font; 
    private int colour; 
    private long style; 

    public FCLabelField(Object text, long style , Font font, int colour) { 
     super(text, style); 
     this.text = text; 
     this.font = font; 
     this.colour = colour; 
    } 

    protected void paint(Graphics graphics) { 

     graphics.setColor(colour); 
     graphics.setFont(font); 
     graphics.drawText(text.toString(), 0, 0, DrawStyle.HCENTER, getContentWidth()); 


    } 
} 

這工作 -

import net.rim.device.api.ui.DrawStyle; 
import net.rim.device.api.ui.Font; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.component.LabelField; 

public class FCLabelField extends LabelField { 

    private Object text; 
    private Font font; 
    private int colour; 
    private long style; 

    public FCLabelField(Object text, long style , Font font, int colour) { 
     super(text, style); 
     this.text = text; 
     this.colour = colour; 
     super.setFont(font); 
    } 

    protected void paint(Graphics graphics) { 

     graphics.setColor(this.colour); 
     super.paint(graphics); 

    } 
} 
+1

嗯,我想知道,不是自己在做'graphics.drawText',你可以運行setColor和setFont語句,然後調用'super.paint(graphics)'?這應該解決你的問題。 –

+0

@Scott W你不妨將你的評論推薦給答案。 –

+0

試過了,行換行但字體沒有更新。所以它修復了錯誤,但似乎造成了另一個錯誤。 –

回答

2

在你的第一個版本要覆蓋paint方法,而不是調用父類的方法paint。第二,你是這樣的,它允許基類中的代碼繪製文本。

如果您不想調用超類'paint方法,則必須更改繪畫方法來計算要繪製的字符串的範圍,並在適當的點將其拆分,從而創建多個調用到drawText在不同y位置分別繪製每個片段。這就是LabelField默認的paint方法,所以你需要模擬它。

當你調用父類的方法paint,原因設置在超作品的字體,並在您paint方法設置字體不會是因爲父類的方法paintGraphics調用對象的setFont,覆蓋什麼你剛剛在你的paint方法中做過。