0

我在模拟器上遇到黑莓 5 和 6 操作系统的问题 当我设置字体时标签字段变得笨拙,在黑莓 7 中运行良好

这是我的示例代码

    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()是两个不同的东西。

如果您只想根据文本和焦点状态更改字体颜色,只需将该逻辑放在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 回答