在绘画方法之外绘制图形


private void draw_shape() {                                         
    Graphics g = getGraphics();
    g.drawLine(0, 0, 100, 100);
    repaint();
}                                        
在绘画方法

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

不起作用,因为您正在获取 Swing 重绘线程之外的当前Graphics。基本上:

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

要使其正常工作,您应该覆盖对象的paintpaintComponent用于 Swing)方法:

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

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

该行消失是因为 Swing(或 AWT)将调用 paint(Graphics) 或 paintComponent(Graphics g) 以使组件痛苦。

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

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

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

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

感谢您的帮助找到答案

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

相关内容

  • 没有找到相关文章

最新更新