# JPanel als Image speichern



## lisaaa17 (30. Mrz 2010)

ist es möglich ein JPanel samt zugehörigen paint() methoden als image zu speichern.

mein momentanes programm sieht wie folgt aus:








es handelt sich hierbei um ein simples programm.
das jframe besteht aus 2 jpanels, eines wo man einstellungen tätigen kann (panel1)
und das 2.aus einer zeichenfläche panel2.
ziel des programms soll es sein, ein zeichnung erstellen zu können und diese dann als png, jpeg oder bmp. zu speichern.
natürlich will ich nur jpanel2 samt inhalt speichern und nicht das komplette jframe.

im jpanel2, werden neue instanzen von der klasse kreis angelegt und diese einem vector hinzugefügt.
die klasse kreis macht nichts anderes, als einen kreis mit definiertem radius auf einen bestimmten position (im konstruktor übergebe) zu zeichnen.

```
class kreis() extends JPanel
{
  int x, y;
  public kreis (int x, int y)
  {
    this.x=x;
    this.y=y;
  }

  public void paint(Graphics g)
  {
    g.DrawOval(x, y, 0, 0, this);
  }
}
```

in meiner zeichenfläche klasse rufe ich das ganze mit 

```
kreis k = new kreis(x,y);
```
auf und füge es einem vector hinzu.

```
v.addElement(k);
```

in der paint methode der zeichenfläche zeichne ich alle elemente des vectors neu:

```
void paint (Graphics g)
{
  for(int n=0; n<v.size(); ++n)
  {
    ((kreis) v.getElement(n)).paint(g);
  }
}
```


----------



## Noctarius (30. Mrz 2010)

Im schlimmsten Fall das ByteArray aus dem Panel holen und speichern 

Swing [Archive] - How to get Image of JPanel / Save as Gif?


----------



## agentone (30. Mrz 2010)

Es gibt übrigens auch das package javax.imageio


----------



## lisaaa17 (1. Apr 2010)

die lösung für das problem sieht wie folgt aus:


```
public void actionPerformed(ActionEvent e)
  {
    if (e.getActionCommand().equals("save"))
    {
      BufferedImage i = getSnapShot(sf);
      try
      {
        ImageIO.write(i, "png", new File("test.png"));
      }
      catch (IOException ex)
      {
        ex.printStackTrace();
      }
    }
  }


  public BufferedImage getSnapShot(JPanel view)
  {
    int w = view.getWidth();
    int h = view.getHeight();

    BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    synchronized (view.getTreeLock())
    {
      view.paint(image.createGraphics());
    }

    return image;
  }
```


----------

