0

メイン メソッドから子クラスのグラフィックス メソッドを呼び出そうとしています。グラフィックコールに問題があります。これが私がやっていることです:

        Graphics gr = null;
        frame.paint(childClass.repaint(gr));

コードを実行すると、おそらくグラフィック オブジェクトが null に設定されているため、NullPointerException が発生します。ただし、そうしないと、グラフィックス オブジェクトが初期化されていないため、コードが実行されません。参考までに、子クラスで呼び出しているコードは次のとおりです。

public Graphics repaint(Graphics gr)
{

   super.paint(gr);

   setEyes();


   Color eyeColor = Color.BLACK;
   gr.setColor(getColour());
   gr.fillOval(50, 100, getHeadSize(), getHeadSize());       
   int count;
   int offset = 90;
   for(count = 0; count < getEyes(); count++)
   {
       gr.setColor(eyeColor);
       gr.fillOval(offset, 150, 15, 15);
       offset = offset+50;
   }

   gr.setColor(getColour());
   gr.drawLine(125, 250, 125, 250+getBodyHeight());
   gr.drawLine(75, 275, 75+getBodyWidth(), 275);
   gr.drawLine(75, 275, 60, 275+getArmLength());
   gr.drawLine(75+getBodyWidth(), 275, 90+getBodyWidth(), 275+getArmLength());
  return gr;
}

描画コードは、メイン メソッドに記述されている場合は期待どおりに機能しますが、子クラスにある必要があることに注意してください。

助けてくれてありがとう。

追加するために編集されました...

これを子クラスから呼び出せるようにする必要があります。メインメソッドから子クラスにあるグラフィックスメソッドを呼び出す方法はありますか?

4

1 に答える 1

0

ペイントを扱うときの最善の方法は、上書きpaintComponentしてすべての描画をそこで行うことです。その後、シーンを更新する必要があるときはいつでも、repaintand onlyを呼び出しますrepaint。このアプローチの使用方法の簡単な例を次に示します。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JComponent;

public class Painter extends JComponent{

    private Art myArt = new Art();

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        final Graphics2D g2d = (Graphics2D) g;
        myArt.draw(g2d);

    }


    private class Art{

        public void draw(Graphics2D g2d){
            g2d.setColor(Color.RED);
            g2d.fillRect(0, 0, 50, 50);
        }

    }
}
于 2013-10-01T20:57:51.150 に答える