Wie lässt sich eine Komponente als Bild speichern?
Über ein neu erzeugtes BufferedImage lässt sich eine Komponente als Bilddatei abspeichern.
Die Beispielklasse erweitert JFrame und erzeugt ein einfaches Fenster mit einem JButton, der beim klasseneigenen ActionListener angemeldet wird. Die Methode actionPerformed() des Listeners enthält die für die Generierung eines *.jpg notwendige Funktionalität.
Es soll ein von der Instanzvariablen JPanel jpanel referenziertes JPanel gespeichert werden. Von diesem werden zunächst Höhe und Breite ermittelt und ein Dateiname vom Typ *.jpg und die gewünschte Kompressionsqualität festgelegt.
Dann wird ein RGB-BufferedImage-Objekt mit den ermittelten Maßen einschließlich seines Grafikkontextes erzeugt und dieser anschließend der paint()-Methode des Panels übergeben.
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;

class SpeichereComponenteALsBildClass extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    public static void main(String args[]) {
        new SpeichereComponenteALsBildClass();
    }

    JPanel jpanel;

    public SpeichereComponenteALsBildClass() {
        jpanel = new JPanel();
        JButton b = new JButton("Save me!");
        b.addActionListener(this);
        jpanel.add(b);
        setSize(300, 300);
        getContentPane().add(jpanel);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {

        String fileName = "SaveComponent.jpg";
        float quality = 0.9f;

        int w = jpanel.getWidth();
        int h = jpanel.getHeight();
        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        Graphics2D big2d = bi.createGraphics();

        jpanel.paint(big2d);

        try {
            FileOutputStream fos = new FileOutputStream(new File(fileName));
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
            param.setQuality(quality, false);
            encoder.setJPEGEncodeParam(param);
            encoder.encode(bi);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
Das Speichern und Codieren des *.jpg erfolgt über einen FileOutputStream wie in jpeg speichern beschrieben.
Komponente als Bild angezeigt
letzte Änderung an:
switch-case-Verzweigung