private void draw_shape() {
Graphics g = getGraphics();
g.drawLine(0, 0, 100, 100);
repaint();
}
在绘画方法中,只绘制那些图形,这是绘画方法的一部分,因此我想在绘画方法之外画形状。这段代码画了线,但它立即消失了,我不明白为什么会发生这种情况。请帮忙
不起作用,因为您正在获取 Swing 重绘线程之外的当前Graphics
。基本上:
- 您获得当前
Graphics
- 你在上面画一些东西
- 然后你调用
repaint()
,它将调用组件的paint()
,从而丢弃你所做的一切
要使其正常工作,您应该覆盖对象的paint
(paintComponent
用于 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 ));