-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()

これらのメソッドは、次のようにペイント メソッドで呼び出されます (Jcomponent ペイント メソッドのコード)。

     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 に答える