不明白楼主意思,如果只是画个框,有那么麻烦吗?最简单的,用setBorder()就可以搞定,非要自己来也可以这样啊
private class RadarArea extends JLabel {
public RadarArea()
{
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red); g.drawRect(0, 0, this.getSize().width - 1, this.getSize().height - 1);
System.out.println(this.getSize());
g.fillRect(10, 10, 5, 5);
}
}
干吗要算来算去的?至于width和height,首先如果g.drawRect(0, 0, this.getSize().width, this.getSize().height);因为线也有宽度,那么它的左边线和下边线会画在边框外,所以要减掉线宽。另,当JLabel放在其他组件里时,它的size并不是外面那个容器的大小,因为容器的边框也要占的,所以会比它小一点,至于Dialog那还有Toolkit呢。

解决方案 »

  1.   

    drawRect是因为这个Rectangle会不断变化的不知道楼上有法子drawRect一个正好和边框重合的Rectangle么?
      

  2.   

    因为你是画在JLabel上,怎么可能画一个与JLabel的容器边框重合的Rectangle呢?
      

  3.   

    不是说可以用Border了吗?另,不要指望用容器的Graphics在容器外画东西,我的东西至少看起来比你的好用。
      

  4.   

    何不试试重写paint方法呢:),我写过一个JLabel只在最下边画一根线跟边框重合的,
    只是有个缺陷,有时刷新不是很及时。试试看啦。