0

シミュレータのBlackberry5&6 OSに問題があります。フォントを設定すると、ラベルフィールドが不器用になります。Blackberry7でも同じように動作します。

これが私のサンプルコードです

    LabelField _lblTitle3 = 
      new LabelField(offerStatus, 
                     USE_ALL_WIDTH | Field.FIELD_VCENTER |
                     LabelField.ELLIPSIS | Field.NON_FOCUSABLE) {

       protected void drawFocus(Graphics graphics, boolean on) {
       };

       protected void paintBackground(Graphics graphics) {
           String offerStatus = _offerObj.getCategoryStatus();

           int color;
           if (offerStatus.equalsIgnoreCase("Saved"))
              color = Color.BLUE;
           else if (offerStatus.equalsIgnoreCase("Accepted!"))
              color = Color.GREEN;
           else
              color = Color.BLACK;

           if (_isFocus) {
               graphics.setColor(Color.WHITE);
           } else {
               graphics.setColor(color);
           }

           super.paint(graphics);
       };
   };

   Font myFont = Font.getDefault();
   FontFamily typeface = FontFamily.forName("Times New Roman");
   int fType = Font.BOLD
   int fSize = 12
   myFont = typeface.getFont(fType, fSize);
   _lblTitle3.setFont(myFont);

下の画像は

フィールドのオーバーラップを参照してください

4

1 に答える 1

3

あなたは何をしようとしているのですか?フォントの色を変更するだけですか?

もしそうなら、あなたはおそらくオーバーライドしたくないでしょうpaintBackground()

の実装内でpaintBackground()、を呼び出してsuper.paint()います。それがどうなるかはわかりませんが、それが間違っていても驚かないでしょう。

paint()paintBackground()は2つの別々のものです。

テキストとフォーカスの状態に応じてフォントの色を変更したいだけの場合は、そのロジックをpaint()メソッドに入れて、そのままにしておきpaintBackground()ます(オーバーライドしないでください)。

また、Graphicsコンテキストを変更する場合、新しい色を設定するなどの操作を行う場合は、通常、最初に古い色を保存し、後でリセットする方が安全です。このようなもの:

        protected void paint(Graphics graphics) {
            int oldColor = graphics.getColor();

            String offerStatus = _offerObj.getCategoryStatus();
            int color;
            if (offerStatus.equalsIgnoreCase("Saved"))
                color = Color.BLUE;
            else if (offerStatus.equalsIgnoreCase("Accepted!"))
                color = Color.GREEN;
            else
                color = Color.BLACK;

            if (_isFocus) {
                graphics.setColor(Color.WHITE);
            } else {
                graphics.setColor(color);
            }
            super.paint(graphics);

            graphics.setColor(oldColor);
        };
于 2012-12-19T11:45:59.180 に答える