import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class CanvasSaver extends JFrame {
private final Canvas canvas;
private final JButton btnSave;
private final BufferedImage img;
public CanvasSaver() {
super("CanvasSaver");
setDefaultCloseOperation(EXIT_ON_CLOSE);
canvas = new Canvas() {
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}
public void update(Graphics g){
g.drawImage(img, 0, 0, this);
}
};
canvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
final int x = e.getX();
final int y = e.getY();
Graphics g = img.getGraphics();
g.setColor(Color.BLACK);
g.drawLine(x, y, x, y);
canvas.repaint();
}
});
canvas.setSize(320, 240);
img = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 320, 240);
btnSave = new JButton("Save");
btnSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btnSave.setEnabled(false);
try {
ImageIO.write(img, "jpeg", new File("c:/out.jpg"));
} catch (IOException e1) {
e1.printStackTrace();
}
btnSave.setEnabled(true);
}
});
}
});
getContentPane().add(canvas, BorderLayout.CENTER);
getContentPane().add(btnSave, BorderLayout.SOUTH);
pack();
setVisible(true);
}
public static void main(String[] args) {
new CanvasSaver();
}
}