Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在绘制方法之外绘制图形_Java_Graphics_Awt - Fatal编程技术网

Java 在绘制方法之外绘制图形

Java 在绘制方法之外绘制图形,java,graphics,awt,Java,Graphics,Awt,在“绘制方法”中,仅绘制那些图形,因为它们是“绘制方法”的一部分 我想用画法以外的方法画形状。 这段代码划清了界限,但它立即消失了,我不明白为什么会发生这种情况。请帮助,因为绘制方法也会绘制东西。不应在绘制方法之外绘制图形。您应该替代绘制方法,如下所示: private void draw_shape() { Graphics g = getGraphics(); g.drawLine(0, 0,

在“绘制方法”中,仅绘制那些图形,因为它们是“绘制方法”的一部分 我想用画法以外的方法画形状。
这段代码划清了界限,但它立即消失了,我不明白为什么会发生这种情况。请帮助

,因为
绘制
方法也会绘制东西。不应在绘制方法之外绘制图形。您应该替代绘制方法,如下所示:

private void draw_shape() {                                         
    Graphics g = getGraphics();
    g.drawLine(0, 0, 100, 100);
    repaint();
}                                        

该线消失,因为Swing(或AWT)将调用paint(图形)或paintComponent(图形g)来处理组件

您需要做的是将绘图逻辑放在paint(图形)或paintComponent(图形g)方法上。后者更可取


如果确实需要使用其他方法绘制对象,请将图像存储为类字段,并在paint或paintComponent方法上绘制此图像。

这不起作用,因为您获取的是当前的
图形
。基本上:

  • 您将获得当前的
    图形
  • 你在上面画点什么
  • 然后调用
    repaint()
    ,它将调用组件的
    paint()
    ,从而放弃您所做的一切
要使其工作,您应该覆盖对象的
绘制
绘制组件
用于Swing)方法:

@Override public void paint (Graphics g) {
    super.paint(g);
    g.drawLine(0, 0, 100, 100);
}

当某些内容被修改时,只需调用
repaint()

谢谢您的帮助,找到了答案

@Override
public void paint(Graphics g) {
  super.paint(g); // if you have children to the component
  g.drawLine(..)
}

问题更可能出现在getGraphics或重新绘制中,并且您不能在绘制之外…顺便问一下-这是使用Swing还是AWT组件?
BufferedImage image = (BufferedImage) createImage(300, 300);
image.getGraphics().drawLine(0, 0, 300, 300);
jLabel1.setIcon( new ImageIcon(image ));