title: How to save image from drawing panel in java?
body: <p>I have a <code>drawing panel</code> with some <code>color buttons</code>. I can draw with different <code>colors</code> in the <code>drawing panel</code>. There is also a <code>save button</code>. I want to capture the <code>image</code> drawn on the <code>panel</code> and <code>save</code> the captured <code>image</code> inside a directory in my pc, when I will click the <code>save button</code>. I don't know much about java. How can I do this?</p>
  
  <p><br><strong>This is my code:</strong> </p>
  
  <pre><code>package paint;
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  
  public class paint{
  public static void main(String[] args){
      Icon iconB = new ImageIcon("blue.gif");
  
      Icon iconM = new ImageIcon("magenta.gif");
  
      Icon iconR = new ImageIcon("red.gif");
  
      Icon iconBl = new ImageIcon("black.gif");
  
      Icon iconG = new ImageIcon("green.gif");
  
  
      JFrame frame = new JFrame("Paint It");
      //Creates a frame with a title of "Paint it"
  
      Container content = frame.getContentPane();
      //Creates a new container
      content.setLayout(new BorderLayout());
      //sets the layout
  
      final PadDraw drawPad = new PadDraw();
      //creates a new padDraw, which is pretty much the paint program
  
      content.add(drawPad, BorderLayout.CENTER);
      //sets the padDraw in the center
  
      JPanel panel = new JPanel();
      //creates a JPanel
      panel.setPreferredSize(new Dimension(32, 68));
      panel.setMinimumSize(new Dimension(32, 68));
      panel.setMaximumSize(new Dimension(32, 68));
      //This sets the size of the panel
  
      JButton clearButton = new JButton("Clear");
      //creates the clear button and sets the text as "Clear"
      clearButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.clear();
          }
      });
      //this is the clear button, which clears the screen.  This pretty
      //much attaches an action listener to the button and when the
      //button is pressed it calls the clear() method
  
              JButton saveButton = new JButton("save");
  
      JButton redButton = new JButton(iconR);
      //creates the red button and sets the icon we created for red
      redButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.red();
          }
  
      });
      //when pressed it will call the red() method.  So on and so on =]
  
      JButton blackButton = new JButton(iconBl);
      //same thing except this is the black button
      blackButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.black();
          }
      });
  
      JButton magentaButton = new JButton(iconM);
      //magenta button
      magentaButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.magenta();
          }
      });
  
      JButton blueButton = new JButton(iconB);
      //blue button
      blueButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.blue();
          }
      });
  
      JButton greenButton = new JButton(iconG);
      //green button
      greenButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
              drawPad.green();
          }
      });
  
      blackButton.setPreferredSize(new Dimension(16, 16));
      magentaButton.setPreferredSize(new Dimension(16, 16));
      redButton.setPreferredSize(new Dimension(16, 16));
      blueButton.setPreferredSize(new Dimension(16, 16));
      greenButton.setPreferredSize(new Dimension(16,16));
      //sets the sizes of the buttons
  
      panel.add(greenButton);
      panel.add(blueButton);
      panel.add(magentaButton);
      panel.add(blackButton);
      panel.add(redButton);
      panel.add(clearButton);
              panel.add(saveButton);
      //adds the buttons to the panel
  
      content.add(panel, BorderLayout.SOUTH);
      //sets the panel to the left
  
      frame.setSize(300, 300);
      //sets the size of the frame
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //makes it so you can close
      frame.setVisible(true);
      //makes it so you can see it
  }
  }
  
  
  class PadDraw extends JComponent{
  Image image;
  //this is gonna be your image that you draw on
  Graphics2D graphics2D;
  //this is what we'll be using to draw on
  int currentX, currentY, oldX, oldY;
  //these are gonna hold our mouse coordinates
  
  //Now for the constructors
  public PadDraw(){
      setDoubleBuffered(false);
      addMouseListener(new MouseAdapter(){
          public void mousePressed(MouseEvent e){
              oldX = e.getX();
              oldY = e.getY();
          }
      });
      //if the mouse is pressed it sets the oldX &amp; oldY
      //coordinates as the mouses x &amp; y coordinates
      addMouseMotionListener(new MouseMotionAdapter(){
          public void mouseDragged(MouseEvent e){
              currentX = e.getX();
              currentY = e.getY();
              if(graphics2D != null)
              graphics2D.drawLine(oldX, oldY, currentX, currentY);
              repaint();
              oldX = currentX;
              oldY = currentY;
          }
  
      });
      //while the mouse is dragged it sets currentX &amp; currentY as the mouses x and y
      //then it draws a line at the coordinates
      //it repaints it and sets oldX and oldY as currentX and currentY
  }
  
  public void paintComponent(Graphics g){
      if(image == null){
          image = createImage(getSize().width, getSize().height);
          graphics2D = (Graphics2D)image.getGraphics();
          graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          clear();
  
      }
      g.drawImage(image, 0, 0, null);
  }
  //this is the painting bit
  //if it has nothing on it then
  //it creates an image the size of the window
  //sets the value of Graphics as the image
  //sets the rendering
  //runs the clear() method
  //then it draws the image
  
  
  public void clear(){
      graphics2D.setPaint(Color.white);
      graphics2D.fillRect(0, 0, getSize().width, getSize().height);
      graphics2D.setPaint(Color.black);
      repaint();
  }
  //this is the clear
  //it sets the colors as white
  //then it fills the window with white
  //thin it sets the color back to black
  public void red(){
      graphics2D.setPaint(Color.red);
      repaint();
  }
  //this is the red paint
  public void black(){
      graphics2D.setPaint(Color.black);
      repaint();
  }
  //black paint
  public void magenta(){
      graphics2D.setPaint(Color.magenta);
      repaint();
  }
  //magenta paint
  public void blue(){
      graphics2D.setPaint(Color.blue);
      repaint();
  }
  //blue paint
  public void green(){
      graphics2D.setPaint(Color.green);
      repaint();
  }
  //green paint
  </code></pre>
  
  <p>}</p>