在绘画方法之外绘制图形

时间:2013-11-16 11:17:56

标签: java graphics awt

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

在绘画方法中,只绘制那些图形,这是绘画方法的一部分,因此 我想在绘画方法之外绘制形状。 这段代码描绘了这条线,但它立即消失了,我不明白为什么会这样。请帮忙

4 个答案:

答案 0 :(得分:3)

这样做不起作用,因为您获得Swing repaint thread之外的当前Graphics。基本上是:

  • 您获得了当前的Graphics
  • 你在上面画了一些东西
  • 然后你打电话给repaint(),它将调用组件的paint(),从而放弃你所做的一切

要使其有效,您应该覆盖对象的paintpaintComponent for Swing)方法:

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

然后在修改内容时调用repaint()

答案 1 :(得分:1)

该行消失,因为Swing(或AWT)将调用paint(Graphics)或paintComponent(Graphics g)以使组件变形。

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

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

答案 2 :(得分:0)

因为paint方法也会描绘东西。您不应该在paint方法之外绘制图形。你应该改写paint方法,如下所示:

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

答案 3 :(得分:0)

感谢帮助找到答案

BufferedImage image = (BufferedImage) createImage(300, 300);
image.getGraphics().drawLine(0, 0, 300, 300);
jLabel1.setIcon( new ImageIcon(image ));