0

我有 DrawOutput 类,它扩展了 JComponent。我传递给paint的this.getGraphics在这里为空。我怎样才能得到这个类的图形?

public class DrawOutput extends JComponent {

这是类的构造函数。

 DrawOutput (MinDistances requiredMinDistances, MainMatrix matrix){
            super();
            getRequiredMedoidsArray(requiredMinDistances);
            paint(this.getGraphics(), requiredMinDistances, matrix);
        }

内容在这里为空

  public void paint(Graphics content, MinDistances requiredMinDistances, MainMatrix matrix)        {
    ...

}

private float[] setColor (int colorID){
           float[]hsbValues=new float[3];
    if(colorID == 1){
        hsbValues =  Color.RGBtoHSB(0,255,255,hsbValues);
    }
    else if(colorID == 2){
        hsbValues =  Color.RGBtoHSB(255,0,255,hsbValues);
    }
    else if(colorID == 3){
        hsbValues =  Color.RGBtoHSB(0,255,0,hsbValues);
    }
    else if(colorID == 4){
        hsbValues =  Color.RGBtoHSB(255,255,0,hsbValues);
    }
    else if(colorID == 5){
        hsbValues =  Color.RGBtoHSB(255,0,0,hsbValues);
    }
    else if(colorID == 6){
        hsbValues =  Color.RGBtoHSB(255,255,255,hsbValues);
    }
    else{
        hsbValues =  Color.RGBtoHSB(0, 0, 0,hsbValues);
    }
    return hsbValues;
}

private void getRequiredMedoidsArray(MinDistances distancesCell){
   ...
}

}

有什么建议么?

4

1 回答 1

0

不要在构造函数中执行此操作,将绘画保留在绘画中,或使用活动渲染进行绘画。

我的建议是

  1. 在构造函数中创建一个 BufferedImage。
  2. 随时在 BufferedImage 上绘制。
  3. 将 BufferedImage 绘制到屏幕上。

全局状态:

BufferedImage offscreen;
Graphics offscreenGraphics;

在构造函数中:

offscreen = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
offscreenGraphics = offscreen.getGraphics();

那么您可以随时在 offscreenGraphics 上绘制而不会出现问题。

然后在油漆中:

g.drawImage(offscreen, 0, 0, width, height, null);

希望这可以帮助。

于 2013-04-27T15:12:54.283 回答