docs: public void paint(Graphics g) 
      {
          FontMetrics fm = this.getFontMetrics(this.getFont());
  
          Insets i = this.getInsets();
  
          viewRect.x = i.left;
          viewRect.y = i.top;
          viewRect.width = this.getWidth() - (i.right + viewRect.x);
          viewRect.height = this.getHeight() - (i.bottom + viewRect.y);
  
          textRect.x = textRect.y = textRect.width = textRect.height = 0;
          iconRect.x = iconRect.y = iconRect.width = iconRect.height = 0;
  
          Font f = this.getFont();
          g.setFont(f);
  
          // layout the text and icon
          String text = SwingUtilities.layoutCompoundLabel(
              this, fm, this.getText(), this.getIcon(), 
              this.getVerticalAlignment(), this.getHorizontalAlignment(),
              this.getVerticalTextPosition(), this.getHorizontalTextPosition(),
              viewRect, iconRect, textRect, 
  	    this.getText() == null ? 0 : this.getIconTextGap());
  
          // Paint the Icon
          if(this.getIcon() != null) { 
              this.getIcon().paintIcon(this, g, iconRect.x, iconRect.y);;
          }
  
          if (text != null && !text.equals(""))
          {
              g.setColor(this.getForeground());
              int mnemonicIndex = this.getDisplayedMnemonicIndex();
              BasicGraphicsUtils.drawStringUnderlineCharAt(g, text, mnemonicIndex, textRect.x, textRect.y + fm.getAscent());
  
              if (m_bUnderlined)
              {   // Draw the underline if underlined
                  Color oldColor = g.getColor();
                  g.setColor(Color.blue);
                  g.drawLine(textRect.x, textRect.y + fm.getAscent(), textRect.x + textRect.width, textRect.y + fm.getAscent());
                  g.setColor(oldColor);
              }
          }
      }