Circle内的标签

时间:2013-06-07 08:58:07

标签: java swing jlabel paintcomponent drawstring

我想在Circle中放置文字(必须使用HTML进行格式化,因此我无法在drawString中使用PaintComponent)。问题是在绘制标签后调用“paintComponent”,因此它覆盖了我的文本。

如何在开头绘制椭圆然后绘制我的字符串?

class Circle extends JLabel 
{

         public Circle(String string) {         super(string);  }
     @Override
    public void paintComponent( Graphics g )
    {
        super.paintComponent(g);
        g.setColor(Color.yellow);
        g.fillOval(0,0, 70, 70);
        g.setColor(Color.blue);
       g.drawOval(0,0, 70, 70); 
    }
 }

3 个答案:

答案 0 :(得分:1)

最快的解决方案可能是将paintComponent更改为

public void paintComponent( Graphics g )
{
  g.setColor(Color.yellow);
  g.fillOval(0,0, 70, 70);
  g.setColor(Color.blue);
  g.drawOval(0,0, 70, 70); 
  super.paintComponent(g);
}
然而,在这种情况下,我也会考虑构成而不是继承。也许定义由标签和带圆圈的面板组成的另一个组件类。

答案 1 :(得分:1)

考虑将组件放在custom border内。有关提示,请参阅TextBubbleBorder

答案 2 :(得分:0)

我会尝试使用setComponentZOrder()将标签顺序设置为高于圆圈。