-3

谁能给我解释一下paintComponent方法?这是什么意思?什么时候叫?它与paint方法有何不同?

请解释以下代码:

    public RoundButton(String label) {
    super(label);

// These statements enlarge the button so that it 
// becomes a circle rather than an oval.
    Dimension size = getPreferredSize();
    size.width = size.height = Math.max(size.width, 
      size.height);
    setPreferredSize(size);

// This call causes the JButton not to paint 
   // the background.
// This allows us to paint a round background.
    setContentAreaFilled(false);
  }

// Paint the round background and label.
  protected void paintComponent(Graphics g) {
    if (getModel().isArmed()) {
// You might want to make the highlight color 
   // a property of the RoundButton class.
      g.setColor(Color.lightGray);
    } else {
      g.setColor(getBackground());
    }
    g.fillOval(0, 0, getSize().width-1, 
      getSize().height-1);

// This call will paint the label and the 
   // focus rectangle.
    super.paintComponent(g);
  }
4

1 回答 1

2

Jcomponent 除了 paint(...) 之外还有 3 种其他的绘制方法:

paintComponent()
paintBorder()
paintChildren()

这些方法以这种方式在paint方法中被调用(来自Jcomponent的paint方法的代码):

     if (!rectangleIsObscured(clipX,clipY,clipW,clipH)) {
        if (!printing) {
        paintComponent(co);
        paintBorder(co);
        }
        else {
        printComponent(co);
        printBorder(co);
        }
            }
    if (!printing) {
        paintChildren(co);
    }
    else {
        printChildren(co);
    }

更改组件的绘制方式时,总是会覆盖 paintComponent () 方法,就像在您的示例中一样。在您的示例中,在调用 super.paintComponent() 之前绘制了一个椭圆。更改边框的原因相同,您只需覆盖paintBorder 方法...

于 2013-03-30T12:49:20.693 回答