# Habe Probleme beim Bild laden! *Update 30.11.2006*



## Cole (25. Okt 2006)

Halo,
habe mir ein kleines Tool gebastelt dass erstmal über einen FileChooser ein Bild laden sollte und es mir dann anzeigen.
Bin da so vorgegangen wie es in dem Buch "Java ist auch eine Insel" beschrieben wurde - fast.
Erstmal hier mein Code:
Klasse1 - da wird nur die GUI erzeugt:


```
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JMenu;
public class Gui {

	public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="210,18"
	private JMenuBar jJMenuBar1 = null;
	private JMenu jMenu = null;
	Ereignishandling ereignisse = new Ereignishandling();  //  @jve:decl-index=0:

	/**
	 * This method initializes jFrame	
	 * 	
	 * @return javax.swing.JFrame	
	 */
	public JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(717, 465));
			jFrame.setTitle("Bilddreher v0.x");
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setJMenuBar(getJJMenuBar1());
			jFrame.setVisible(true);
		
		}
		return jFrame;
	}
	/**
	 * This method initializes jJMenuBar1	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar1() {
		if (jJMenuBar1 == null) {
			jJMenuBar1 = new JMenuBar();
			jJMenuBar1.setPreferredSize(new Dimension(0, 30));
			jJMenuBar1.add(getJMenu());
		}
		return jJMenuBar1;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Datei");
			
			JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
			dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
			ereignisse.OeffnenDialog(dateiOeffnen);
			jMenu.add(dateiOeffnen);			
			jMenu.addSeparator();
			
			JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
			ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
			jMenu.add(ordnerOeffnen);
			jMenu.addSeparator();
			
			JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
			speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
			jMenu.add(speichernUnter);
			jMenu.addSeparator();
			
			JMenuItem exit = new JMenuItem("Beenden");
			ereignisse.ShortcutsErstellen(exit, 'X');
			ereignisse.Exithandling(exit);
			jMenu.add(exit);
			
			
		}
		return jMenu;
	}


}
```

Klasse2 - Hier hab ich mal das Actionhandling reingepackt:

```
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.File;

import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;

public class Ereignishandling extends JComponent{
	JFileChooser fileChooser = new JFileChooser();
	Image image ;

	
	  public void setImage( File file )
	  {
	    image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() );
	    if ( image != null )
	      repaint();
	  }
	  @Override
	  protected void paintComponent( Graphics g )
	  {
	    if ( image != null )
	      g.drawImage( image, 0, 0, this );
	  }
	

	public void ShortcutsErstellen(JMenuItem MenueEintrag, char c) {
		MenueEintrag.setAccelerator(KeyStroke.getKeyStroke(c,
				InputEvent.CTRL_MASK));

	}

	public void Exithandling(JMenuItem exit) {

		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}

	public void OeffnenDialog(JMenuItem dateiOeffnen) {
		dateiOeffnen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg1) {

				fileChooser.setSize(100, 100);
				fileChooser.setDialogTitle("Bilddatei öffnen");
				fileChooser.setFileFilter( new FileFilter()
				    {
				      @Override
				      public boolean accept( File f )
				      {
				        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
				            || f.getName().toLowerCase().endsWith( ".gif" );
				      }
				      @Override
				      public String getDescription()
				      {
				        return "*.jpg;*.gif";
				      }
				    } );
				switch (fileChooser.showOpenDialog(null)) {
				case JFileChooser.APPROVE_OPTION:
				    File bild = fileChooser.getSelectedFile();
				   setImage(bild);

//							InputStream in = new FileInputStream(fileChooser.getSelectedFile());
//							BufferedReader reader = new BufferedReader(new InputStreamReader(in));
					
				


					break;
				case JFileChooser.CANCEL_OPTION:

					break;

				}
			}
		});

	}
}
```

Klasse3 - Die Main:

```
public class Main extends Gui {

		
	public static void main(String[] args) {
		Gui gui = new Gui();
		
		gui.getJFrame();
	}

}
```

Aber es wird mir jetzt nix angezeigt, ist ja auch klar, weil der Ausdruck

```
g.drawImage( image, 0, 0, this );
```
 in der paintComponent Methode nix mit this anfangen kann. (Denk ich mir mal so).
Was muss ich dem denn da angeben? Eine Instanz von der KLasse Gui? Da wüsste ich aber nicht wie ich dran kommen soll.

Oder gibts gar einen besseren/einfacheren/eleganteren Weg?


----------



## André Uhres (25. Okt 2006)

```
public JFrame getJFrame() {
...
            jFrame.add(ereignisse);//<<--------------
            jFrame.setVisible(true);
        }
        return jFrame;
    }
```


----------



## Cole (25. Okt 2006)

Danke dir hat super funktioniert! Wäre ich aber glaub von allein nicht drauf gekommen!

[Edit]: Erledigt wegegemacht:

Wollte das geladene Bild verkleinert darstellen, hab mir das in etwa so gedacht:

```
public void setImage( File file )
	  {
	    image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() );
	    image.getScaledInstance(20, 20, Image.SCALE_FAST);
	    if ( image != null ){
	    repaint();
	    }
	  }
```

aber so wirklich funktionieren tuts nicht, die Größe bleibt so wie sie war.
Was muss ich denn da jetzt tun? Hab in der Forensuche geschaut, aber das was ich gefunden hab hat mich nicht wirklich weitergebracht.

[Edit] Habs doch noch hinbekommen!


----------



## Cole (25. Okt 2006)

Hab da nochmal ein Verständnis Problem:
Ich poste mal den Code, dann könnt ihrs ausprobieren, dann ist es leichter zu erklären:

Gui:

```
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JMenu;
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.ComponentOrientation;
import javax.swing.SwingConstants;
public class Gui {

	public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="210,18"
	private JMenuBar jJMenuBar1 = null;
	private JMenu jMenu = null;
	Ereignishandling ereignisse = new Ereignishandling();  //  @jve:decl-index=0:
	private JPanel jPanel = null;
	private JPanel jPanel1 = null;
	private JButton jButtonDrehung90Links = null;
	private JButton jButtonDrehung90Rechts = null;
	private JPanel jPanel2 = null;
	private JPanel jPanel3 = null;
	private JLabel jLabel = null;
	/**
	 * This method initializes jFrame	
	 * 	
	 * @return javax.swing.JFrame	
	 */
	public JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(717, 465));
			jFrame.setTitle("Bilddreher v0.x");
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setJMenuBar(getJJMenuBar1());
			jFrame.setContentPane(getJPanel());
			jFrame.add(ereignisse);
			jFrame.setVisible(true);
		
		}
		return jFrame;
	}
	/**
	 * This method initializes jJMenuBar1	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar1() {
		if (jJMenuBar1 == null) {
			jJMenuBar1 = new JMenuBar();
			jJMenuBar1.setPreferredSize(new Dimension(0, 30));
			jJMenuBar1.add(getJMenu());
		}
		return jJMenuBar1;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Datei");
			
			JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
			dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
			ereignisse.OeffnenDialog(dateiOeffnen);
			jMenu.add(dateiOeffnen);			
			jMenu.addSeparator();
			
			JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
			ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
			jMenu.add(ordnerOeffnen);
			jMenu.addSeparator();
			
			JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
			speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
			jMenu.add(speichernUnter);
			jMenu.addSeparator();
			
			JMenuItem exit = new JMenuItem("Beenden");
			ereignisse.ShortcutsErstellen(exit, 'X');
			ereignisse.Exithandling(exit);
			jMenu.add(exit);
			
			
		}
		return jMenu;
	}
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BorderLayout());
			jPanel.add(getJPanel1(), BorderLayout.NORTH);
			jPanel.add(getJPanel2(), BorderLayout.WEST);
		}
		return jPanel;
	}
	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(new FlowLayout());
			jPanel1.setPreferredSize(new Dimension(100, 50));
			jPanel1.add(getjButtonDrehung90Links(), null);
			jPanel1.add(getjButtonDrehung90Rechts(), null);
		}
		return jPanel1;
	}
	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getjButtonDrehung90Links() {
		if (jButtonDrehung90Links == null) {
			jButtonDrehung90Links = new JButton();
			jButtonDrehung90Links.setText("90° links");
			ereignisse.drehung90Links(jButtonDrehung90Links);
		}
		return jButtonDrehung90Links;
	}
	/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getjButtonDrehung90Rechts() {
		if (jButtonDrehung90Rechts == null) {
			jButtonDrehung90Rechts = new JButton();
			jButtonDrehung90Rechts.setText("90° rechts");
			ereignisse.drehung90rechts(jButtonDrehung90Rechts);
		}
		return jButtonDrehung90Rechts;
	}
	/**
	 * This method initializes jPanel2	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			jPanel2 = new JPanel();
			jPanel2.setLayout(new BorderLayout());
			jPanel2.setPreferredSize(new Dimension(200, 0));
			jPanel2.add(getJPanel3(), BorderLayout.NORTH);
		}
		return jPanel2;
	}
	/**
	 * This method initializes jPanel3	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel3() {
		if (jPanel3 == null) {
			jLabel = new JLabel();
			jLabel.setText("Original");
			jPanel3 = new JPanel();
			jPanel3.setLayout(new FlowLayout());
			jPanel3.add(jLabel, null);
		}
		return jPanel3;
	}


}
```


Handling:

```
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;

public class Ereignishandling extends JComponent{
	JFileChooser fileChooser = new JFileChooser();
	Image image ;

	  public void setImage( File file )
	  {
	    image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() ).getScaledInstance(100, 100, Image.SCALE_FAST);

	    if ( image != null ){
	    repaint();
	    }
	  } 
	  @Override
	  protected void paintComponent( Graphics g )
	  {
	    if ( image != null )

	      g.drawImage( image, 10, 0, this );
	
	  }

	public void ShortcutsErstellen(JMenuItem MenueEintrag, char c) {
		MenueEintrag.setAccelerator(KeyStroke.getKeyStroke(c,
				InputEvent.CTRL_MASK));

	}

	public void Exithandling(JMenuItem exit) {

		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}

	public void OeffnenDialog(JMenuItem dateiOeffnen) {
		dateiOeffnen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg1) {

				fileChooser.setSize(100, 100);
				fileChooser.setDialogTitle("Bilddatei öffnen");
				fileChooser.setFileFilter( new FileFilter()
				    {
				      @Override
				      public boolean accept( File f )
				      {
				        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
				            || f.getName().toLowerCase().endsWith( ".gif" );
				      }
				      @Override
				      public String getDescription()
				      {
				        return "*.jpg;*.gif";
				      }
				    } );
				switch (fileChooser.showOpenDialog(null)) {
				case JFileChooser.APPROVE_OPTION:
				    File bild = fileChooser.getSelectedFile();
				    
				   setImage(bild);

					break;
				case JFileChooser.CANCEL_OPTION:

					break;

				}
			}
		});

	}
	public void drehung90Links(JButton jButtonDrehung90Links) {

		jButtonDrehung90Links.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}
	
	public void drehung90rechts(JButton jButtonDrehung90Rechts) {

		jButtonDrehung90Rechts.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}
	
}
```


Main:

```
public class Main extends Gui {

		
	public static void main(String[] args) {
		Gui gui = new Gui();
		
		gui.getJFrame();
	}

}
```

Ich hätte jetzt gerne, dass das kleine Bild unter dem Schriftzug "Orignial" erscheint und nicht rechts daneben.
Rechts wollte ich eine Spalte machen mit "Bearbeitet".

Danke schonmal!


----------



## André Uhres (26. Okt 2006)

Cole hat gesagt.:
			
		

> ..Ich hätte jetzt gerne, dass das kleine Bild unter dem Schriftzug "Orignial" erscheint und nicht rechts daneben...




```
public JFrame getJFrame() {
...
//            jFrame.add(ereignisse);//<-----Bild hier wieder wegmachen
            jFrame.setVisible(true);
            
        }
        return jFrame;
    }
...
    private JPanel getJPanel() {
...
            jPanel.add(getJPanel1(), BorderLayout.NORTH);
            jPanel.add(getJPanel2(), BorderLayout.CENTER);//<-------------------
        }
        return jPanel;
    }
...
    private JPanel getJPanel2() {
...
            jPanel2.add(getJPanel3(), BorderLayout.NORTH);
            JPanel bilder = new JPanel(new GridLayout());//<--------------------
            bilder.add(ereignisse);//<----------------------Das originale Bild
            //bilder.add(...);//<-----Hier kommt später das bearbeitete Bild
            jPanel2.add(bilder);//<---------------------------------------------
        }
        return jPanel2;
    }
...
    private JPanel getJPanel3() {
...
            jPanel3 = new JPanel();
            jPanel3.setLayout(new GridLayout());//<----------------------------
            jPanel3.add(jLabel, null);
            jPanel3.add(new JLabel("Bearbeitet"));//<--------------------------
        }
        return jPanel3;
    }
...
    public void setImage( File file ) {
        image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() )
        .getScaledInstance(300, -1, Image.SCALE_SMOOTH);//<---------------------------
```


----------



## Cole (26. Okt 2006)

Hab gerade die Änderungen vorgenommen, aber leider wird das Bild nicht angezeigt.
Die Schriftzüge Original und Bearbeitet sind da, alles super, aber das Bild taucht nirgends auf.


```
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JMenu;
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.ComponentOrientation;
import javax.swing.SwingConstants;
public class Gui {

	public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="210,18"
	private JMenuBar jJMenuBar1 = null;
	private JMenu jMenu = null;
	Ereignishandling ereignisse = new Ereignishandling();  //  @jve:decl-index=0:
	private JPanel jPanel = null;
	private JPanel jPanel1 = null;
	private JButton jButtonDrehung90Links = null;
	private JButton jButtonDrehung90Rechts = null;
	private JPanel jPanel2 = null;
	private JPanel jPanel3 = null;
	private JLabel jLabel = null;
	/**
	 * This method initializes jFrame	
	 * 	
	 * @return javax.swing.JFrame	
	 */
	public JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(717, 465));
			jFrame.setTitle("Bilddreher v0.x");
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setJMenuBar(getJJMenuBar1());
			jFrame.setContentPane(getJPanel());
//			jFrame.add(ereignisse);
			jFrame.setVisible(true);
		
		}
		return jFrame;
	}
	/**
	 * This method initializes jJMenuBar1	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar1() {
		if (jJMenuBar1 == null) {
			jJMenuBar1 = new JMenuBar();
			jJMenuBar1.setPreferredSize(new Dimension(0, 30));
			jJMenuBar1.add(getJMenu());
		}
		return jJMenuBar1;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Datei");
			
			JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
			dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
			ereignisse.OeffnenDialog(dateiOeffnen);
			jMenu.add(dateiOeffnen);			
			jMenu.addSeparator();
			
			JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
			ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
			jMenu.add(ordnerOeffnen);
			jMenu.addSeparator();
			
			JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
			speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
			jMenu.add(speichernUnter);
			jMenu.addSeparator();
			
			JMenuItem exit = new JMenuItem("Beenden");
			ereignisse.ShortcutsErstellen(exit, 'X');
			ereignisse.Exithandling(exit);
			jMenu.add(exit);
			
			
		}
		return jMenu;
	}
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BorderLayout());
			jPanel.add(getJPanel1(), BorderLayout.NORTH);
			jPanel.add(getJPanel2(), BorderLayout.CENTER);
		}
		return jPanel;
	}
	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(new FlowLayout());
			jPanel1.setPreferredSize(new Dimension(100, 50));
			jPanel1.add(getjButtonDrehung90Links(), null);
			jPanel1.add(getjButtonDrehung90Rechts(), null);
		}
		return jPanel1;
	}
	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getjButtonDrehung90Links() {
		if (jButtonDrehung90Links == null) {
			jButtonDrehung90Links = new JButton();
			jButtonDrehung90Links.setText("90° links");
			ereignisse.drehung90Links(jButtonDrehung90Links);
		}
		return jButtonDrehung90Links;
	}
	/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getjButtonDrehung90Rechts() {
		if (jButtonDrehung90Rechts == null) {
			jButtonDrehung90Rechts = new JButton();
			jButtonDrehung90Rechts.setText("90° rechts");
			ereignisse.drehung90rechts(jButtonDrehung90Rechts);
		}
		return jButtonDrehung90Rechts;
	}
	/**
	 * This method initializes jPanel2	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			jPanel2 = new JPanel();
			jPanel2.add(getJPanel3(), BorderLayout.NORTH);
			JPanel bilder = new JPanel(new GridLayout());
			bilder.add(ereignisse);
//			jPanel2.setLayout(new BorderLayout());
//			jPanel2.setPreferredSize(new Dimension(200, 0));
			jPanel2.add(bilder);

		}
		return jPanel2;
	}
	/**
	 * This method initializes jPanel3	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel3() {
		if (jPanel3 == null) {
			jLabel = new JLabel();
			jLabel.setText("Original");
			jPanel3 = new JPanel();
			jPanel3.setLayout(new GridLayout());
			jPanel3.add(jLabel, null);
			jPanel3.add(new JLabel("Bearbeitet"));
		}
		return jPanel3;
	}


}
```



```
image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() ).getScaledInstance(300, -1, Image.SCALE_SMOOTH);
```


----------



## André Uhres (26. Okt 2006)

```
private JPanel getJPanel2() {
      if (jPanel2 == null) {
         jPanel2 = new JPanel();
         jPanel2.setLayout(new BorderLayout());//<---du hast das BorderLayout irrtümlich entfernt !
```


----------



## Cole (26. Okt 2006)

Hab das Borderlayout wieder reingemacht, jetzt wird das Bild auch wieder angezeigt.
Aber die 2 Labels Original und bearbeitet erscheinen nicht mehr 
Was ist denn da los?


----------



## André Uhres (26. Okt 2006)

Cole hat gesagt.:
			
		

> Hab das Borderlayout wieder reingemacht, jetzt wird das Bild auch wieder angezeigt.
> Aber die 2 Labels Original und bearbeitet erscheinen nicht mehr
> Was ist denn da los?


Funzt aber bei mir:

```
package paint;
/*
 * Main.java
 */
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
public class Main extends Gui {
    public static void main(String[] args) {
        Gui gui = new Gui();
        gui.getJFrame();
    }
}
class Gui {
    public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="210,18"
    private JMenuBar jJMenuBar1 = null;
    private JMenu jMenu = null;
    Ereignishandling ereignisse = new Ereignishandling();  //  @jve:decl-index=0:
    private JPanel jPanel = null;
    private JPanel jPanel1 = null;
    private JButton jButtonDrehung90Links = null;
    private JButton jButtonDrehung90Rechts = null;
    private JPanel jPanel2 = null;
    private JPanel jPanel3 = null;
    private JLabel jLabel = null;
    /**
     * This method initializes jFrame
     * @return JFrame
     */
    public JFrame getJFrame() {
        if (jFrame == null) {
            jFrame = new JFrame();
            jFrame.setSize(new Dimension(717, 465));
            jFrame.setTitle("Bilddreher v0.x");
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setJMenuBar(getJJMenuBar1());
            jFrame.setContentPane(getJPanel());
//         jFrame.add(ereignisse);
            jFrame.setVisible(true);
        }
        return jFrame;
    }
    /**
     * This method initializes jJMenuBar1
     * @return JMenuBar
     */
    private JMenuBar getJJMenuBar1() {
        if (jJMenuBar1 == null) {
            jJMenuBar1 = new JMenuBar();
            jJMenuBar1.setPreferredSize(new Dimension(0, 30));
            jJMenuBar1.add(getJMenu());
        }
        return jJMenuBar1;
    }
    /**
     * This method initializes jMenu
     * @return JMenu
     */
    private JMenu getJMenu() {
        if (jMenu == null) {
            jMenu = new JMenu();
            jMenu.setText("Datei");
            JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
            dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
            ereignisse.OeffnenDialog(dateiOeffnen);
            jMenu.add(dateiOeffnen);
            jMenu.addSeparator();
            JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
            ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
            jMenu.add(ordnerOeffnen);
            jMenu.addSeparator();
            JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
            speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
            jMenu.add(speichernUnter);
            jMenu.addSeparator();
            JMenuItem exit = new JMenuItem("Beenden");
            ereignisse.ShortcutsErstellen(exit, 'X');
            ereignisse.Exithandling(exit);
            jMenu.add(exit);
        }
        return jMenu;
    }
    /**
     * This method initializes jPanel
     * @return JPanel
     */
    private JPanel getJPanel() {
        if (jPanel == null) {
            jPanel = new JPanel();
            jPanel.setLayout(new BorderLayout());
            jPanel.add(getJPanel1(), BorderLayout.NORTH);
            jPanel.add(getJPanel2(), BorderLayout.CENTER);
        }
        return jPanel;
    }
    /**
     * This method initializes jPanel1
     * @return JPanel
     */
    private JPanel getJPanel1() {
        if (jPanel1 == null) {
            jPanel1 = new JPanel();
            jPanel1.setLayout(new FlowLayout());
            jPanel1.setPreferredSize(new Dimension(100, 50));
            jPanel1.add(getjButtonDrehung90Links(), null);
            jPanel1.add(getjButtonDrehung90Rechts(), null);
        }
        return jPanel1;
    }
    /**
     * This method initializes jButton
     * @return JButton
     */
    private JButton getjButtonDrehung90Links() {
        if (jButtonDrehung90Links == null) {
            jButtonDrehung90Links = new JButton();
            jButtonDrehung90Links.setText("90° links");
            ereignisse.drehung90Links(jButtonDrehung90Links);
        }
        return jButtonDrehung90Links;
    }
    /**
     * This method initializes jButton1
     * @return JButton
     */
    private JButton getjButtonDrehung90Rechts() {
        if (jButtonDrehung90Rechts == null) {
            jButtonDrehung90Rechts = new JButton();
            jButtonDrehung90Rechts.setText("90° rechts");
            ereignisse.drehung90rechts(jButtonDrehung90Rechts);
        }
        return jButtonDrehung90Rechts;
    }
    /**
     * This method initializes jPanel2
     * @return JPanel
     */
    private JPanel getJPanel2() {
        if (jPanel2 == null) {
            jPanel2 = new JPanel();
            jPanel2.setLayout(new BorderLayout());
            jPanel2.add(getJPanel3(), BorderLayout.NORTH);
            JPanel bilder = new JPanel(new GridLayout());
            bilder.add(ereignisse);
//         jPanel2.setPreferredSize(new Dimension(200, 0));
            jPanel2.add(bilder);
        }
        return jPanel2;
    }
    /**
     * This method initializes jPanel3
     * @return JPanel
     */
    private JPanel getJPanel3() {
        if (jPanel3 == null) {
            jLabel = new JLabel();
            jLabel.setText("Original");
            jPanel3 = new JPanel();
            jPanel3.setLayout(new GridLayout());
            jPanel3.add(jLabel, null);
            jPanel3.add(new JLabel("Bearbeitet"));
        }
        return jPanel3;
    }
}
class Ereignishandling extends JComponent{
    JFileChooser fileChooser = new JFileChooser();
    Image image ;
    public void setImage( File file ) {
        image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() ).getScaledInstance(300, -1, Image.SCALE_SMOOTH);
        if ( image != null ){
            repaint();
        }
    }
    @Override
            protected void paintComponent( Graphics g ) {
        if ( image != null )
            g.drawImage( image, 10, 0, this );
    }
    public void ShortcutsErstellen(JMenuItem MenueEintrag, char c) {
        MenueEintrag.setAccelerator(KeyStroke.getKeyStroke(c,
                InputEvent.CTRL_MASK));
    }
    public void Exithandling(JMenuItem exit) {
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }
        });
    }
    public void OeffnenDialog(JMenuItem dateiOeffnen) {
        dateiOeffnen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg1) {
                fileChooser.setSize(100, 100);
                fileChooser.setDialogTitle("Bilddatei öffnen");
                fileChooser.setFileFilter( new FileFilter() {
                    @Override
                            public boolean accept( File f ) {
                        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
                        || f.getName().toLowerCase().endsWith( ".gif" );
                    }
                    @Override
                            public String getDescription() {
                        return "*.jpg;*.gif";
                    }
                } );
                switch (fileChooser.showOpenDialog(null)) {
                    case JFileChooser.APPROVE_OPTION:
                        File bild = fileChooser.getSelectedFile();
                        setImage(bild);
                        break;
                    case JFileChooser.CANCEL_OPTION:
                        break;
                }
            }
        });
    }
    public void drehung90Links(JButton jButtonDrehung90Links) {
        jButtonDrehung90Links.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }
        });
    }
    public void drehung90rechts(JButton jButtonDrehung90Rechts) {
        jButtonDrehung90Rechts.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }
        });
    }
}
```


----------



## Cole (27. Okt 2006)

Hab mal deinen Code kopiert, damit funzt es bei mir auch.   
Muss ich mal am Wochenende drüber gehen und mir anschauen was da jetzt der Unterschied ist.
Gibts da in Eclipse ne Funktion mit der ich 2 Klassen vergleichen kann?


----------



## André Uhres (27. Okt 2006)

Dies kann man gratis im Internet downloaden: ExamDiff - Visual File Comparison Tool
Aber ich bin nicht sicher ob es dir in diesem Fall etwas nützt: ich hab deinen Code nämlich neu formatiert


----------



## Cole (21. Nov 2006)

Ich brauch nochmal eure Hilfe, ich schnall grad gar nix mehr.
Also, ein Bild ist geladen, und dass wollte ich über nen Button drehen, und dann rechts neben dem alten Bild anzeigen lassen.
Hab mal versucht das gleiche Bild unbearbeitet zu TEstzwecken rechts anzeigen zu lassen, aber das hat auch nicht geklappt. Hab das so probiert:


```
private JPanel getJPanel2() {
        if (jPanel2 == null) {
            jPanel2 = new JPanel();
            jPanel2.setLayout(new BorderLayout());
            jPanel2.add(getJPanel3(), BorderLayout.NORTH);
            JPanel bilder = new JPanel(new GridLayout());
            bilder.add(ereignisse);
      bilder.add(ereignisse); // <-- Hier einfach doppelt rein, bekomme aber nur ein Bild angezeigt
//         jPanel2.setPreferredSize(new Dimension(200, 0));
            jPanel2.add(bilder);
        }
        return jPanel2;
    }
```

Aber da funzt gar nix  Könnt ihr euch das mal anschauen und mir erklären?
Hier mal das ganze Projekt:


```
public class Main extends Gui {

		
	public static void main(String[] args) {
		Gui gui = new Gui();
		
		gui.getJFrame();
	}

}
```


```
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;

public class Ereignishandling extends JComponent{
	JFileChooser fileChooser = new JFileChooser();
	Image image ;
	Image image2;
	BufferedImage temp = null;

	  public void setImage( File file )
	  {
	    image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() ).getScaledInstance(300, -1, Image.SCALE_SMOOTH);

	    if ( image != null ){
	    repaint();
	    }
	  } 
	  @Override
	  protected void paintComponent( Graphics g )
	  {
	    if ( image != null )

	      g.drawImage( image, 10, 0, this );
	
	  }

	public void ShortcutsErstellen(JMenuItem MenueEintrag, char c) {
		MenueEintrag.setAccelerator(KeyStroke.getKeyStroke(c,
				InputEvent.CTRL_MASK));

	}

	public void Exithandling(JMenuItem exit) {

		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}

	public void OeffnenDialog(JMenuItem dateiOeffnen) {
		dateiOeffnen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg1) {

				fileChooser.setSize(100, 100);
				fileChooser.setDialogTitle("Bilddatei öffnen");
				fileChooser.setFileFilter( new FileFilter()
				    {
				      @Override
				      public boolean accept( File f )
				      {
				        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
				            || f.getName().toLowerCase().endsWith( ".gif" );
				      }
				      @Override
				      public String getDescription()
				      {
				        return "*.jpg;*.gif";
				      }
				    } );
				switch (fileChooser.showOpenDialog(null)) {
				case JFileChooser.APPROVE_OPTION:
				    File bild = fileChooser.getSelectedFile();
				    
				   setImage(bild);

					break;
				case JFileChooser.CANCEL_OPTION:

					break;

				}
			}
		});

	}
	public void drehung90Links(JButton jButtonDrehung90Links) {

		jButtonDrehung90Links.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//TODO
			}
		});
	}
	
	public Image drehung90rechts(JButton jButtonDrehung90Rechts) {

		jButtonDrehung90Rechts.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dreheBild(image);
			
			}
		});
		return image;
	}

        //Hier ist die Methode die mir das Bild drehen sollte
	protected Image dreheBild(Image image) {
		temp = new BufferedImage(image.getHeight(null), image.getWidth(null), 0);
		Graphics2D g = (Graphics2D) temp.getGraphics();
		g.setTransform(AffineTransform.getRotateInstance(-Math.PI/2));
		g.drawImage(image, 0, -image.getWidth(null), null);
		return temp;
		
	}
	
}
```


```
class Gui {
    public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="210,18"
    private JMenuBar jJMenuBar1 = null;
    private JMenu jMenu = null;
    Ereignishandling ereignisse = new Ereignishandling();  //  @jve:decl-index=0:
    private JPanel jPanel = null;
    private JPanel jPanel1 = null;
    private JButton jButtonDrehung90Links = null;
    private JButton jButtonDrehung90Rechts = null;
    private JPanel jPanel2 = null;
    private JPanel jPanel3 = null;
    private JLabel jLabel = null;
	/**
     * This method initializes jFrame
     * @return JFrame
     */
    public JFrame getJFrame() {
        if (jFrame == null) {
            jFrame = new JFrame();
            jFrame.setSize(new Dimension(717, 465));
            jFrame.setTitle("Bilddreher v0.x");
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setJMenuBar(getJJMenuBar1());
            jFrame.setContentPane(getJPanel());
//         jFrame.add(ereignisse);
            jFrame.setVisible(true);
        }
        return jFrame;
    }
    /**
     * This method initializes jJMenuBar1
     * @return JMenuBar
     */
    private JMenuBar getJJMenuBar1() {
        if (jJMenuBar1 == null) {
            jJMenuBar1 = new JMenuBar();
            jJMenuBar1.setPreferredSize(new Dimension(0, 30));
            jJMenuBar1.add(getJMenu());
        }
        return jJMenuBar1;
    }
    /**
     * This method initializes jMenu
     * @return JMenu
     */
    private JMenu getJMenu() {
        if (jMenu == null) {
            jMenu = new JMenu();
            jMenu.setText("Datei");
            JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
            dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
            ereignisse.OeffnenDialog(dateiOeffnen);
            jMenu.add(dateiOeffnen);
            jMenu.addSeparator();
            JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
            ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
            jMenu.add(ordnerOeffnen);
            jMenu.addSeparator();
            JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
            speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
            jMenu.add(speichernUnter);
            jMenu.addSeparator();
            JMenuItem exit = new JMenuItem("Beenden");
            ereignisse.ShortcutsErstellen(exit, 'X');
            ereignisse.Exithandling(exit);
            jMenu.add(exit);
        }
        return jMenu;
    }
    /**
     * This method initializes jPanel
     * @return JPanel
     */
    private JPanel getJPanel() {
        if (jPanel == null) {
            jPanel = new JPanel();
            jPanel.setLayout(new BorderLayout());
            jPanel.add(getJPanel1(), BorderLayout.NORTH);
            jPanel.add(getJPanel2(), BorderLayout.CENTER);
        }
        return jPanel;
    }
    /**
     * This method initializes jPanel1
     * @return JPanel
     */
    private JPanel getJPanel1() {
        if (jPanel1 == null) {
            jPanel1 = new JPanel();
            jPanel1.setLayout(new FlowLayout());
            jPanel1.setPreferredSize(new Dimension(100, 50));
            jPanel1.add(getjButtonDrehung90Links(), null);
            jPanel1.add(getjButtonDrehung90Rechts(), null);
        }
        return jPanel1;
    }
    /**
     * This method initializes jButton
     * @return JButton
     */
    private JButton getjButtonDrehung90Links() {
        if (jButtonDrehung90Links == null) {
            jButtonDrehung90Links = new JButton();
            jButtonDrehung90Links.setText("90° links");
            ereignisse.drehung90Links(jButtonDrehung90Links);
        }
        return jButtonDrehung90Links;
    }
    /**
     * This method initializes jButton1
     * @return JButton
     */
    private JButton getjButtonDrehung90Rechts() {
        if (jButtonDrehung90Rechts == null) {
            jButtonDrehung90Rechts = new JButton();
            jButtonDrehung90Rechts.setText("90° rechts");
            ereignisse.drehung90rechts(jButtonDrehung90Rechts);
        }
        return jButtonDrehung90Rechts;
    }
    /**
     * This method initializes jPanel2
     * @return JPanel
     */
    private JPanel getJPanel2() {
        if (jPanel2 == null) {
            jPanel2 = new JPanel();
            jPanel2.setLayout(new BorderLayout());
            jPanel2.add(getJPanel3(), BorderLayout.NORTH);
            JPanel bilder = new JPanel(new GridLayout());
            bilder.add(ereignisse);

//         jPanel2.setPreferredSize(new Dimension(200, 0));
            jPanel2.add(bilder);
        }
        return jPanel2;
    }
    /**
     * This method initializes jPanel3
     * @return JPanel
     */
    private JPanel getJPanel3() {
        if (jPanel3 == null) {
            jLabel = new JLabel();
            jLabel.setText("Original");
            jPanel3 = new JPanel();
            jPanel3.setLayout(new GridLayout());
            jPanel3.add(jLabel, null);
            jPanel3.add(new JLabel("Bearbeitet"));
        }
        return jPanel3;
    }
}
```
Danke schonmal![/code]


----------



## André Uhres (21. Nov 2006)

```
class Gui {
...
    private JPanel bilder;
    Ereignishandling ereignisse = new Ereignishandling(this);  //  @jve:decl-index=0:
    private ZweitesBild bild2;
...
    private JPanel getJPanel2() {
        if (jPanel2 == null) {
            jPanel2 = new JPanel();
            jPanel2.setLayout(new BorderLayout());
            jPanel2.add(getJPanel3(), BorderLayout.NORTH);
            bilder = new JPanel(new GridLayout());
            bilder.add(ereignisse);
            bild2 = new ZweitesBild();
            bilder.add(bild2);
            jPanel2.add(bilder);
        }
        return jPanel2;
    }
    public ZweitesBild getZweitesBild() {
        return bild2;
    }
...
}

class Ereignishandling extends JComponent{
...
    Image temp = null;
    private Gui gui;
    public Ereignishandling(Gui gui){
        this.gui = gui;
    }
...
    protected Image dreheBild(Image image) {
        temp = createImage(image.getHeight(null), image.getWidth(null));
        Graphics2D g = (Graphics2D) temp.getGraphics();
        g.rotate((Math.PI / 2), 0, 0);
        g.drawImage(image, 0, -image.getHeight(null), null);
        gui.getZweitesBild().setImage(temp);
        return temp;
    }
}
class ZweitesBild extends JPanel{
    private Image image2;
    public void setImage( Image img) {
        image2 = img;
        repaint();
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        if ( image2 != null )
            g.drawImage( image2, 10, 0, this );
    }
}
```


----------



## Cole (21. Nov 2006)

Krasse scheisse, hat perfekt funktionert!!
Danke dir!!
Werde jetzt erstmal vesuchen das nachzuvollziehen, wenn ich wieder Fragen hab poste ich hier.

OT: Wenn ich einen Beitrag von mir editiere, wird der Thread dann in der Liste hochgeschoben, oder funzt das nur bei neuen Antworten?

[Edit]: Da hab ich schon mal wieder ne Frage:
Wollte grad das Gleiche noch für den Button links einbauen, im Actionlistener.
Schaut so aus:

```
protected Image dreheBildlinks(Image image) {
		
        temp = createImage(image.getHeight(null), image.getWidth(null));
        Graphics2D g = (Graphics2D) temp.getGraphics();
        g.rotate((Math.PI*1.5 ),0, 0);   <-- 270°
        g.drawImage(image, 0, -image.getHeight(null), null);
        gui.getZweitesBild().setImage(temp);
        return temp;
     		
}
```

Es tut sich aber nix. Wo liegt denn mein Denkfehler?

[Edit]: Habs doch noch hinbekommen!!


[Edit]: Aber ein anderes Problem, und zwar wenn ich um 180 ° drehen will. Hab das so gemacht:

```
protected Image dreheBild180(Image image2) {
        temp = createImage(image.getHeight(null), image.getWidth(null));
        Graphics2D g = (Graphics2D) temp.getGraphics();
        g.rotate((Math.PI),(temp.getWidth(null)/2),0 );
        g.drawImage(image, 0, -image.getHeight(null), null);
        gui.getZweitesBild().setImage(temp);
        return temp;
		
	}
```

Die Drehung an sich klappt gut, nur wird das Vorschaubild gestaucht, es sieht so aus als ob es als Breite die Höhe vom Originalbild bekommt. WIe kann ich das ändern?


----------



## André Uhres (22. Nov 2006)

Cole hat gesagt.:
			
		

> OT: Wenn ich einen Beitrag von mir editiere, wird der Thread dann in der Liste hochgeschoben


Das hatte ich vor ein paar Wochen im Sitecheck "Feedback - java-forum.org" als Option angefragt, 
aber es wurde bis jetzt nicht gemacht:
http://www.java-forum.org/de/viewtopic.php?p=231835#231835



			
				Cole hat gesagt.:
			
		

> ein anderes Problem, und zwar wenn ich um 180 ° drehen will


So wird bei jedem Klick auf "90° rechts" das Bild jeweils um 90° weitergedreht:

```
class Ereignishandling extends JComponent{
...
    private double winkel;
...
    protected void paintComponent( Graphics g ) {
        super.paintComponent(g);
        if ( image == null ) return;
        //Bild im Panel zentriert malen:
        int x = (getWidth() - image.getWidth(this))/2;
        int y = (getHeight() - image.getHeight(this))/2;
        g.drawImage(image, x, y, this);
    }
...
    protected void dreheBild(Image image2) {
        winkel += 90;
        if (winkel >= 360) winkel = 0;
        gui.getZweitesBild().setImage(image, winkel);
    }
}
class ZweitesBild extends JPanel{
    private Image image;
    private double winkel;
    public void setImage( Image img, double winkel) {
        this.winkel = winkel;
        image = img;
        repaint();
    }
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(image == null)return ;
        Graphics2D g2d = (Graphics2D)g;
        AffineTransform origXform = g2d.getTransform();
        AffineTransform newXform = (AffineTransform)(origXform.clone());
        //Zentrum der Drehung ist das Zentrum des Panels:
        int xRot = this.getWidth()/2;
        int yRot = this.getHeight()/2;
        newXform.rotate(Math.toRadians(winkel), xRot, yRot);
        g2d.setTransform(newXform);
        //Bild im Panel zentriert malen:
        int x = (getWidth() - image.getWidth(this))/2;
        int y = (getHeight() - image.getHeight(this))/2;
        g2d.drawImage(image, x, y, this);
        g2d.setTransform(origXform);
    }
}
```


----------



## Cole (22. Nov 2006)

Danke, ich werds heute abend mal einbauen.
Kannst du mir trotzdem noch erklären, was falsch war? Wie schon gesagt, die Drehung an sich hat wunderbar geklappt, das Problem war ja nur, dass das Vorschaubild so scheisse ausgesehen hat!


----------



## André Uhres (22. Nov 2006)

Cole hat gesagt.:
			
		

> ..Kannst du mir trotzdem noch erklären, was falsch war? ..


Hier:
temp = createImage(image.getWidth(null), image.getHeight(null));
hatten wir Width und Height vertauscht  :wink:


----------



## Cole (22. Nov 2006)

Hehe, das ist ja crazy. Hab grad schnell die 2. Varainte ausprobiert, also temp = createImage(image.getWidth(null), image.getHeight(null));  und damit geht es hervorragned. Werde dann wohl bei dieser Variante bleiben. Danke nochmal für die fixe Hilfe!


----------



## Cole (30. Nov 2006)

[Edit]: So wies aussieht hat es sich erledigt, habs hinbekommen. Zumindest vorläufig mal 

[Edit]: Zu früh gefreut :/

Wie kann ich mir denn die Höhe und die Breite des Originalbildes holen?
Beim Öffnen der Datei schreib ich das:


```
case JFileChooser.APPROVE_OPTION:
				    File bild = fileChooser.getSelectedFile();
				    
		-->		    originalBreite = Toolkit.getDefaultToolkit().getImage(bild.getAbsolutePath()).getWidth(null);
		-->		    originalHoehe = Toolkit.getDefaultToolkit().getImage(bild.getAbsolutePath()).getHeight(null);
				    
				    setImage(bild);
					break;
```

Wenn ich dann aber originalBreite und originalHoehe ausgeben lasse bekomm ich als Ergebnis immer -1 und 0.

Warum?


----------



## André Uhres (1. Dez 2006)

Versuch's mal so:

```
ImageIcon icon = new ImageIcon(bild.getAbsolutePath()); 
System.out.println(icon.getIconWidth()+" "+icon.getIconHeight());
```


----------



## Cole (1. Dez 2006)

Mit deiner Variante hats geklappt, danke.
Kannst du mir aber bitte erklären, warum ich da erst den Umweg über das ImageIcon gehen muss?


----------



## André Uhres (1. Dez 2006)

Cole hat gesagt.:
			
		

> Mit deiner Variante hats geklappt, danke.
> Kannst du mir aber bitte erklären, warum ich da erst den Umweg über das ImageIcon gehen muss?


Naja, das mit dem Toolkit ist wahrscheinlich nicht mehr die aktuell empfehlenswerte Methode.
So geht's aber auch ohne ImageIcon:

```
Image img = null;
                        try {
                            img = ImageIO.read(bild);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        originalBreite = img.getWidth(null);
                        originalHoehe = img.getHeight(null);
```


----------



## Cole (9. Jan 2007)

Ein erneutes Problem:
Habs mal soweit gemacht, dass ich das gedrehte Bild wegspeichern kann, das sieht so aus:


```
public void SpeichernDialog(JMenuItem speichernUnter) {
		speichernUnter.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0){
				fileChooser.setSize(100, 100);
				fileChooser.setDialogTitle("Bilddatei speichern unter...");
				fileChooser.setFileFilter( new FileFilter()
				    {
				      @Override
				      public boolean accept( File f )
				      {
				        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
				            || f.getName().toLowerCase().endsWith( ".gif" );
				      }
				      @Override
				      public String getDescription()
				      {
		
		        return "*.jpg;*.gif";
				      }
				    } );
				switch (fileChooser.showSaveDialog(null)) {
				case JFileChooser.APPROVE_OPTION:
				            
		              		BufferedImage bi = new BufferedImage( 100, 100, BufferedImage.TYPE_INT_RGB );
							Graphics2D g2d = bi.createGraphics();
				                       g2d.drawImage( bufferedImage, 10, 0, null );
							g2d.dispose();
							
							String typ = "jpg";
							File datei = fileChooser.getSelectedFile();
							try {
							ImageIO.write( bufferedImage, typ, datei );
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	

					break;
				case JFileChooser.CANCEL_OPTION:

					break;

			}

			}
		});
		
	}
```

So wird aber natürlich nur das kleinskalierte Bild abgespeichert. Gut, kein Problem dachte ich mir, dann hohl ich mir eben eine scaledInstance (siehe unten) aber das funktioniert nicht, bekomme da einen Typfehler und wenn ich nen Cast mach, bekomm ich einen Laufzeitfehler.


```
case JFileChooser.APPROVE_OPTION:
				            
		              		BufferedImage bi = new BufferedImage( 100, 100, BufferedImage.TYPE_INT_RGB );
							Graphics2D g2d = bi.createGraphics();
					-->		bufferedImage = bufferedImage.getScaledInstance(500, 500, bufferedImage.SCALE_SMOOTH);
				            g2d.drawImage( bufferedImage, 10, 0, null );
							g2d.dispose();
							
							String typ = "jpg";
							File datei = fileChooser.getSelectedFile();
							try {
							ImageIO.write( bufferedImage, typ, datei );
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
```

Die 500/500 sind nur exemplarisch zum Ausprobieren!

Wie bekomm ich es jetzt hin, dass das Bild erst wieder groß wird und danach gespeichert wird?


----------



## André Uhres (9. Jan 2007)

Spontan würde ich sagen, daß das so eh nicht gehen kann. 
Wenn man das verkleinerte Bild wieder vergrössert, führt das logischerweise zu einem Qualitätsverlust.


----------



## Cole (9. Jan 2007)

Ja, das mit dem Qualitätsverlust stimmt schon.
Eigentlich sollte ich nur das ursprüngliche Bild drehen und speichern und nicht das Thumbnail.

Aber trotzdem meine Frage, wieso das mit dem Bild wieder groß machen nicht so funktioniert?


----------



## André Uhres (9. Jan 2007)

Beim Kompilieren bekomme diese Fehlermeldung:
cannot find symbol
symbol: variable bufferedImage

Der Typfehler bedeutet ganz einfach, daß getScaledInstance ein Image zurückgibt das kein BufferedImage ist.


----------



## Cole (9. Jan 2007)

André Uhres hat gesagt.:
			
		

> Der Typfehler bedeutet ganz einfach, daß getScaledInstance ein Image zurückgibt das kein BufferedImage ist.



Ja, das weiss ich. Hab dann mal versucht nen Cast drauf zumachen, dann funktioniert zwar das kompilieren, aber wenn ich es laufen lass und das Bild speichern will, bekomm ich diesesn Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.awt.image.ToolkitImage
	at Ereignishandling$3.actionPerformed(Ereignishandling.java:140)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.AbstractButton.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


----------



## André Uhres (9. Jan 2007)

Ja gut, die Ursache bleibt aber die gleiche.


----------



## Cole (9. Jan 2007)

Hmm. Naja ist jetzt auch egal, hat sich erledigt.
Ich habs aufgetrennt, einmal das richtige Bild das im Hintergrund nur gedreht wird und dann wieder rausgespeicehrt und dann noch die Thumbnails extra gemacht.
Hat ganz ordenlich funktioniert!


----------

