簡體   English   中英

在子類中調用圖形方法

[英]Call a graphics method in a child class

我試圖從主方法中調用子類中的圖形方法。 我在調用圖形時遇到問題。 這是我在做什么:

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

當我執行代碼時,我得到一個NullPointerException,大概是因為圖形對象被設置為null。 但是,如果我不這樣做,由於圖形對象未初始化,代碼將無法執行。 作為參考,這里是我在子類中調用的代碼:

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;
}

請注意,使用main方法編寫時,繪圖代碼可以按預期工作,但是它必須在子類中。

謝謝你的幫助。

編輯添加...

我需要能夠從子類中調用它。 無論如何,是否有必要從main方法中調用位於子類中的圖形方法?

處理繪畫時,最好的做法是讓您重寫paintComponent並在那里進行所有繪圖。 之后,任何時候您需要更新場景時,只需調用repaint而只需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);
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM