Java 无法保存canvas画板中的图像

想要每次单击save的时候可以生成当前图像,但一直无法显示画过的痕迹。


```java
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

class lines {
    private int x1,x2,y1,y2;
    private Color color;
    public lines(Color color,int x1,int y1,int x2,int y2){
        this.x1=x1;
        this.x2=x2;
        this.y1=y1;
        this.y2=y2;
        this.color=color;
    }
    public void drawlines(Graphics g)
    {
        g.setColor(color);
        g.drawLine(x1,y1,x2,y2);
    }
}
class Mycanvas extends Panel implements MouseListener{
    int x1=-1,y1=-1,x2=-1,y2=-1,left=-1,number=0;
    private lines[] shapearray = new lines[1000000];
    Mycanvas()
    {
        setBackground(Color.RED);
        addMouseListener(this);
        setForeground(Color.WHITE);
    }
    public void paint(Graphics g)
    {
        if(x1!=-1)
        {
            if(x1==x2 && y2==y1)
            {
                x1=x2=y1=y2=-1;
            }
            if(x2!=-1) {
                g.drawLine(x1, y1, x2, y2);
                x1=x2;
                y1=y2;
                x2=-1;
                x2=-1;
            }
        }
    }
    public void mousePressed(MouseEvent e)
    {
        if(x1==-1&&y1==-1)
        {
            x1=e.getX();
            y1=e.getY();
        }
        else
        {
            x2=e.getX();
            y2=e.getY();
        }
        if(e.getModifiersEx()==InputEvent.BUTTON1_DOWN_MASK)
        {
            left=1;
            repaint();
        }
    }
    public void mouseReleased(MouseEvent e){}
    public void mouseEntered(MouseEvent e){
    }
    public void mouseExited(MouseEvent e)
    {
        left=-1;
    }
    public void mouseClicked(MouseEvent e){
    }
    public void update(Graphics g) {
        if(left==1)
        {
            paint(g);
        }
        else
        {
            super.update(g);
        }
    }
}
public class A extends JFrame implements ActionListener{
    MenuBar menubar;
    Menu menu2, menu3;
    MenuItem open, save, New, White, Green, Blue, Red;
    Mycanvas canvas;
    A() {
        //canvas.
        setTitle("Draw Line app");
        canvas = new Mycanvas();
        add(canvas);
        menubar = new MenuBar();
        menu2 = new Menu("File");
        menu3 = new Menu("Colour");
        New = new MenuItem("New");
        open = new MenuItem("open");
        save = new MenuItem("save");
        White = new MenuItem("White");
        Green = new MenuItem("Green");
        Blue = new MenuItem("Blue");
        Red = new MenuItem("Red");
        menu2.add(New);
        menu2.add(open);
        menu2.add(save);
        menu3.add(White);
        menu3.add(Green);
        menu3.add(Blue);
        menu3.add(Red);
        menubar.add(menu2);
        menubar.add(menu3);
        setMenuBar(menubar);
        New.addActionListener(this);
        save.addActionListener(this);
        White.addActionListener(this);
        Green.addActionListener(this);
        Blue.addActionListener(this);
        Red.addActionListener(this);
        setBounds(100, 100, 500, 500);
        setVisible(true);
        validate();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Graphics g = getGraphics();
        if (e.getSource() == New) {
            canvas.x1 = -1;
            canvas.x2 = -1;
            canvas.y1 = -1;
            canvas.y2 = -1;
            canvas.repaint();
        }
        else if(e.getSource()==White) {
            canvas.setForeground(Color.WHITE);
        }
        else if(e.getSource()==Green)
        {
            canvas.setForeground(Color.GREEN);
        }
        else if (e.getSource()==Blue)
        {
            canvas.setForeground(Color.BLUE);
        }
        else if(e.getSource()==Red)
        {
            canvas.setForeground(Color.RED);
        }
        else if(e.getSource()==save)
        {
            BufferedImage img = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_RGB);
            this.printAll(img.getGraphics());
            try {
                ImageIO.write(img,"jpg",new File("1.jpg"));
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        A a = new A();
        a.addWindowListener(new WindowAdapter()  //为了关闭窗口
        {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

```
画的是这样的

img

保存下来却是这样的

img