想要每次单击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);
}
});
}
}
```
画的是这样的
保存下来却是这样的