2011-02-17 17 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()); 


    } 
} 

これは動作します - あなたがpaintメソッドをオーバーライドし、スーパークラスのpaintメソッドを呼び出していない、あなたの最初のバージョンで

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

を。 2番目は、基本クラスのコードでテキストをペイントすることができます。

スーパークラス 'paintメソッドを呼び出さない場合は、描く文字列の範囲を計算し、適切なポイントで分割して複数の呼び出しを行うようにペイント方法を変更する必要がありますdrawTextに移動して、各フラグメントを別々のy位置に別々に描画します。これは、LabelFieldpaintメソッドがデフォルトで行う処理なので、エミュレートする必要があります。

あなたはスーパークラスpaintメソッドを呼び出して行うとスーパークラスのpaint方法は何を上書きし、GraphicsオブジェクトにsetFontを呼び出しているので、理由スーパー作品にフォントを設定し、あなたのpaint方法でフォントを設定することはしませんあなたはちょうどあなたのpaintメソッドで行った。

関連する問題