0

我想把文本(必须用 HTML 格式化,所以我不能drawString在里面使用PaintComponent)放在 Circle 中。问题是“ 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); 
    }
 }
4

3 回答 3

1

考虑将组件放在自定义边框内。查看TextBubbleBorder想法。

于 2013-06-07T18:51:20.127 回答
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);
}

但是,在这种情况下,我也会考虑组合而不是继承。也许定义另一个由标签和带有圆圈的面板组成的组件类。

于 2013-06-07T09:16:02.963 回答
0

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

于 2013-06-07T09:09:26.027 回答