Fehler bei erstellen eines Bildbearbeitungsprogramm

Timmbow

Grünschnabel
Guten Tag Zusammen,

in der Uni haben wir eine für mich fast unmögliche Aufgabe heute bekommen. Es soll ein Bild geladen werden und in ein Panel ausgegeben werden ein Text aus einer Text area bei Mausklick darauf gesetzt werden und das ganze dann abgespeichert werden.
Bis auf den letzten Punkt habe ich alles drin ... doch wenn ich speicher sind bei mir die eingefühgten Schriften alle weg ... aber ich weis nicht wo der Fehler ist ?!
Ich hoffe ihr könnt mir helfen ... zur Info ... ich komme aus der C Programmierung und bin neu in der JavaWelt, um genau zu seit 2 Wochen :)

Hier mein Code ( mit Netbeans erstellt):
Code:
package aufgabe2;

import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;


public class Aufgabe2 extends javax.swing.JFrame {
    
    public ImagePanel imagePanel;

    private 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.paintAll(image.createGraphics());
		}
		return image;
    }

    public class ImagePanel extends JPanel {
         
	private BufferedImage image;
        
        public ImagePanel() {
		super();
		setSize(637, 522);
        }

	@Override
	public void paintComponent(Graphics g) {
            super.paintComponent(g);
            
            
            
            g.drawImage(image, 0, 10, null);
            
            addMouseListener(new MouseAdapter() {
                    @Override
                    public void mousePressed(MouseEvent e){ 
                        Graphics g = getGraphics();
                        g.setFont(new Font("TimesRoman", Font.PLAIN,Integer.valueOf(spnTextGroesse.getValue().toString()).intValue()));
                        g.setColor(cchTextFarbe.getColor());
                        g.drawString(txaText.getText(), e.getX(), e.getY());
                    }
                });               
	}

	public void initImage(File imageFile) {
		try {
			image = ImageIO.read(imageFile);
			repaint();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
    }
    
    public Aufgabe2() {        
        initComponents();
        
        imagePanel = new ImagePanel();        
        panZeichnung.add(imagePanel);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        panEinstellung = new javax.swing.JPanel();
        cchTextFarbe = new javax.swing.JColorChooser();
        btnDateiLaden = new javax.swing.JButton();
        spnTextGroesse = new javax.swing.JSpinner();
        jScrollPane1 = new javax.swing.JScrollPane();
        txaText = new javax.swing.JTextArea();
        panZeichnung = new javax.swing.JPanel();
        btnSpeichern = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        btnDateiLaden.setText("Datei laden");
        btnDateiLaden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDateiLadenActionPerformed(evt);
            }
        });

        spnTextGroesse.setModel(new javax.swing.SpinnerNumberModel(10, 1, 100, 1));

        txaText.setColumns(20);
        txaText.setRows(5);
        jScrollPane1.setViewportView(txaText);

        javax.swing.GroupLayout panEinstellungLayout = new javax.swing.GroupLayout(panEinstellung);
        panEinstellung.setLayout(panEinstellungLayout);
        panEinstellungLayout.setHorizontalGroup(
            panEinstellungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panEinstellungLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panEinstellungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cchTextFarbe, javax.swing.GroupLayout.DEFAULT_SIZE, 617, Short.MAX_VALUE)
                    .addGroup(panEinstellungLayout.createSequentialGroup()
                        .addGroup(panEinstellungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(spnTextGroesse)
                            .addComponent(btnDateiLaden, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 362, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panEinstellungLayout.setVerticalGroup(
            panEinstellungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panEinstellungLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panEinstellungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panEinstellungLayout.createSequentialGroup()
                        .addComponent(btnDateiLaden, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(spnTextGroesse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(cchTextFarbe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jTabbedPane1.addTab("Einstellungen", panEinstellung);

        btnSpeichern.setText("Bild speichern");
        btnSpeichern.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSpeichernActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panZeichnungLayout = new javax.swing.GroupLayout(panZeichnung);
        panZeichnung.setLayout(panZeichnungLayout);
        panZeichnungLayout.setHorizontalGroup(
            panZeichnungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panZeichnungLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnSpeichern, javax.swing.GroupLayout.DEFAULT_SIZE, 617, Short.MAX_VALUE)
                .addContainerGap())
        );
        panZeichnungLayout.setVerticalGroup(
            panZeichnungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panZeichnungLayout.createSequentialGroup()
                .addContainerGap(488, Short.MAX_VALUE)
                .addComponent(btnSpeichern)
                .addContainerGap())
        );

        jTabbedPane1.addTab("Zeichnung", panZeichnung);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void btnDateiLadenActionPerformed(java.awt.event.ActionEvent evt) {                                              
        JFileChooser chooser = new JFileChooser();
        int rueckgabeWert = chooser.showOpenDialog(null);
        if(rueckgabeWert == JFileChooser.APPROVE_OPTION)
        {
            imagePanel.initImage(chooser.getSelectedFile());
        }
    }                                             

    private void btnSpeichernActionPerformed(java.awt.event.ActionEvent evt) {                                             
        BufferedImage i = getSnapShot(imagePanel);
        try {
                ImageIO.write(i, "png", new File("testTIMM.png"));
        } catch (IOException ex) {
                ex.printStackTrace();
        }
    }                                            
    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Aufgabe2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Aufgabe2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Aufgabe2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Aufgabe2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Aufgabe2().setVisible(true);
                
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton btnDateiLaden;
    private javax.swing.JButton btnSpeichern;
    private javax.swing.JColorChooser cchTextFarbe;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JPanel panEinstellung;
    private javax.swing.JPanel panZeichnung;
    private javax.swing.JSpinner spnTextGroesse;
    private javax.swing.JTextArea txaText;
    // End of variables declaration                   
}
 

Timmbow

Grünschnabel
Hallo Zusammen,

habe den Fehler gefunden:

Graphics g = getGraphics();
dafür muss
Graphics g = image.getGraphics();
rein.