private void draw_shape() {
Graphics g = getGraphics();
g.drawLine(0, 0, 100, 100);
repaint();
}
在绘画方法中,只绘制那些图形,这是绘画方法的一部分,因此 我想在绘画方法之外绘制形状。 这段代码描绘了这条线,但它立即消失了,我不明白为什么会这样。请帮忙
答案 0 :(得分:3)
这样做不起作用,因为您获得Swing repaint thread之外的当前Graphics
。基本上是:
Graphics
repaint()
,它将调用组件的paint()
,从而放弃你所做的一切要使其有效,您应该覆盖对象的paint
(paintComponent
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 ));