1

次のコードを持つ BouncyFace というクラスが与えられたとします。

    import javax.swing.*;
    import java.awt.*;
    public class BouncyFace extends JComponent  {
        protected int xDelta = 1;
        protected int yDelta = 1;
        private Color fleshColor;
        public BouncyFace(int x, int y, int side)  {
        super();
        setBounds(x, y, side, side);
        fleshColor = new Color(214,157,106);
        setBackground(fleshColor);
        setForeground(Color.black);
    }


      public void paint(Graphics g)  {
        g.setColor( getBackground() );
        g.fillOval(0, 0, getWidth()-1, getHeight()-1);
   }

    public void move() {
       if (getParent() != null) {
       setLocation( getX()+xDelta, getY()+yDelta );
       if ((xDelta > 0) && (getX()+getWidth() > getParent().getWidth()) ) {
           xDelta = -Math.abs(xDelta);
       } else if ((xDelta < 0) && (getX() < 0)) {
           xDelta = Math.abs(xDelta);
       }
       if ((yDelta > 0) && (getY()+getHeight() > getParent().getHeight()) ) {
           yDelta = -Math.abs(yDelta);
       } else if ((yDelta < 0) && (getY() < 0)) {
           yDelta = Math.abs(yDelta);
       }           
       repaint();
   }

そして、BouncyFace が楕円形だけでなく 2 つの小さな楕円形も描画できるように、paint() を変更するクラスを作成するように言われました。

編集:

わかりました、これが私が持っている新しいクラスです-

    import javax.swing.*;
    import java.awt.*;
    public class Features extends BouncyFace
    {
      public Features(int x,int y, int side)
     {
        super(x,y,side);
        //setBounds(x,y,side,side);
    }


     public void paint(Graphics g)
     {
       super.paint(g);
       //g.setColor( getBackground() );
       g.drawOval(10, 10, getWidth(), getHeight());

     }
  }

ただし、ドライバーでこれを行うと新しい楕円形しか表示されないため、これは古いペイントを上書きしたと思います

私的な特徴の目;

目 = 新しい機能 (10,10,10);

これは私が設定したパラメーターと関係がありますか? たくさん質問して申し訳ありませんが、ポリモーフィズムで継承を理解しようとしているだけで、ここで完全に立ち往生しており、新しい質問を始める必要はないと思います。

この問題に関するすべての洞察に感謝します。私はそれを解決し、現在別の問題に取り組んでいます。スタックオーバーフロー コミュニティに感謝します。

4

1 に答える 1

0

(私) まず、BouncyFace を拡張する新しいクラスを作成し、その paint(...) メソッドをオーバーライドします。スーパーのペイント メソッドも呼び出すことを忘れないでください。これを試すとどうなりますか?

(あなた) 私はそれをしました。ただし、まず最初に、古いペイントを保持せずに新しいクラスのペイントにあるものに完全に変更するのではなく、古いペイントに追加するためにペイントに何を入れればよいかわかりません。知らない。

super.paint(g)新しいクラスのpaint(Graphics g)オーバーライドを必ず呼び出す必要があります。これにより、元の楕円形が表示されます。

于 2013-04-26T02:17:37.030 に答える