# Image Datei laden und anzeigen lassen?!



## jianni (26. Mai 2005)

Hallo Leute.

Für mein Software Praktikum muss ich eine GUI erstellen die darüber hinnaus noch ein paar Anwendungen durchführen kann.Ich muss mit dem FileChooser  jpg und png Datein auswählen können und die dann in einem InternalFrame laden und anzeigen lassen.HAbe auch schon den Code geschrieben nur er zeigt das Bild nicht an. 

Wär super wenn ihr drübergucken und denn Fehler entdecken könntet.

Danke im Vorraus

*GUI code:*

```
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

import com.sun.rsasign.g;

/*
* Created on 11.05.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author Jianni
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/



public class GUI extends JFrame implements ActionListener {
	
	JMenuItem open = new JMenuItem("Open");
	JMenuItem save = new JMenuItem("Save");
	JMenuItem print = new JMenuItem("Print");
	JMenuItem exit = new JMenuItem("Exit");
	JMenuItem close = new JMenuItem("Close");
	JMenuItem undo = new JMenuItem("Undo");
	JMenuItem cut = new JMenuItem("Cut");
	JMenuItem copy = new JMenuItem("Copy");
	JMenuItem paste = new JMenuItem("paste");
	JMenuItem clear = new JMenuItem("Clear");
	//BildPanel imagev ;
	File file; 
	Picture pic;
	public GUI() {

		super("Handmanager Version 1");
		setSize(600,600);
	    setLocation(100,100);
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    Container contentpane = getContentPane();
	    JScrollPane scroll = new JScrollPane();
	    
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	    
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        //imagev = new ImagePanel();
        //imagev = new BildPanel();
        pic = new Picture();  
   	    JDesktopPane jdp = new JDesktopPane();
	    JInternalFrame iframe = new 
        JInternalFrame("iframe",true,false,true,true);
	    iframe.setSize(350,350);
	    iframe.setBackground(Color.white);
	    iframe.getContentPane().add(pic);
	    iframe.getContentPane().add(scroll);
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    jdp.add(iframe);

	    JPanel pane = new JPanel();
	    JMenuBar mbar = new JMenuBar();
	    pane.add(mbar);
        
	    setContentPane(pane);
	    setContentPane(jdp);
	    setVisible(true);

	    

	    iframe.setVisible(true);

	    open.addActionListener(this);
        exit.addActionListener(this);
        save.addActionListener(this);
        print.addActionListener(this);
        
        
		// Datei
		JMenu m = new JMenu("Datei");
	    m.add(open);
	    m.add(save);
	    m.add(print);
	    m.addSeparator();
	    m.add(close);
	    m.add(exit);

	    // Bearbeiten
	    JMenu m1 = new JMenu("Bearbeiten");
	    m1.add(undo);
	    m1.addSeparator();
	    m1.add(copy);
	    m1.add(cut);
	    m1.add(paste);
		m1.addSeparator();
		m1.add(clear);

		//Button
		JButton button = new JButton("Help");
		//button.setEnabled(true);


		mbar.add(m);
		mbar.add(m1);
		mbar.add(button);
		setJMenuBar(mbar);


	}
	public static void main (String[] args){
		GUI g = new GUI();
		g.show();

	}
	public void actionPerformed(ActionEvent evt){
		Object source = evt.getSource(); 
	if (evt.getSource() == exit)
	{
		int response;
		response = JOptionPane.showConfirmDialog(null,"Do you really want to exit?","Question",
				JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE);
			    if (response == 0)
			    {
			    	System.exit(0);
			    }
		


	}
	if (evt.getSource() == open)
	{
		JFileChooser chooser = new JFileChooser();
		
		 
		    chooser.setFileFilter(new FileFilter()
	  {
	    	public boolean accept(File f)
	    	{
	    		return f.isDirectory()||f.getName().toLowerCase().endsWith(".jpg")||
                       f.getName().toLowerCase().endsWith(".png");
	    		
	    	}
	    	public String getDescription()
	     {
	    		return "images";
	     }
	  });
		    if(chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
				return;
		    file = chooser.getSelectedFile();
			pic.setImage(file);
	   

		
	    
	  // int returnVal = chooser.showOpenDialog(chooser);
	    //if(returnVal == JFileChooser.APPROVE_OPTION) {
	      //System.out.println("You chose to open this file: " +
	        //    chooser.getSelectedFile().getName());
	  //}
  
    } 
	
	if (evt.getSource()== save)
	{
		
		
		JFileChooser  fd = new JFileChooser();
        fd.setCurrentDirectory(new File("."));
		int pressedButton = fd.showSaveDialog(fd);
		if(pressedButton == JFileChooser.APPROVE_OPTION)
		{
			fd.setSelectedFile(new File(".*"));
			fd.setMultiSelectionEnabled(true);
		
		
		
		
		
		
		}	
	}
	if (evt.getSource() == print)
	{
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable((Printable) this);
        if (printJob.printDialog()) {
            try {
                printJob.print();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
          }
       }

	
	//Die letzten beiden	
  }
}
```

*und jetzt kommt der Picture code :*


```
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/*
 * Created on 25.05.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Jianni
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Picture extends JPanel 
  {
	Image image;
	MediaTracker mt;
	Dimension imagesize;
	Graphics g;
	Graphics2D g2;
	
	public void setImage(File file){
		
	try {
    	image =ImageIO.read(file);
        }
    catch(IOException exeption)
	{
    	exeption.printStackTrace();
    	
    }
    
    mt = new MediaTracker(this);
	mt .addImage(image, 0);
	try 
	{
		// Warten , bis das Image volllstaendig geladen ist
		mt.waitForAll();
	}
	
    catch(InterruptedException e)
	{	
    }
   
    imagesize = new Dimension();
    imagesize.height = image.getHeight(this);
    imagesize.width  = image.getWidth(this);
    setPreferredSize(imagesize);
   

	
	repaint();
   
  }


public void paintComponent(Graphics g)
{
 	super.paintComponents(g);
 	g2 = (Graphics2D)g;

 	if (image != null)
 	{
 		
 		g2.drawImage(image,0,0, 
 			image.getWidth(this), 
			image.getHeight(this), this);
 		}
 	}
}
```


----------



## javaprogger1987 (27. Mai 2005)

Finde ist alles etwas zu kompliziert gemacht, aber gut..
Ich würd mal den MediaTracker rausnehmen, ich bin mir nicht sicher ob der bei ImageIO.read überhaupt gebraucht wird.. Ich benutz ihn zumindest nie.. Vielleicht hängt er da bei waitForAll();


----------



## jianni (27. Mai 2005)

yo
danke.bin jetzt über dieses problem hinweg
habe jetzt ein neues.ich habe es geschafft ein polygon auf das eingeladene bild zu zeichnen.kann es rotieren lassen,nur ich muss jetzt noch punkte an die ecken des polygons zaubern um es zu vergrössern bzw. zu verkleinern.
die punkte p3 und p4 habe ich schon und damit lasse ich es rotieren.
wenn du vielleicht ein vorschlag hast, dan bitte her damit.

beispiel

```
p1____________p2
   |                    |
   |         p3       |
   |          |         |
   |          |         |
   |          |         |
   |______|_____|
            p4
```


----------



## jianni (27. Mai 2005)

so ein sch...
da habe ich mir muhe gegeben und es sieht aus wie bei Lumpi im Hundehaus!

muss dir vorstellen es ist ein rechteck
oben links und oben rechts sie die punkte p1 und p2
die sollen das ganze ding vergrösseren bzw verkleinern
p3 ist in der mitte des rechtecks und p4 in der mitte der untersten seite.
die lassen es rotieren

das war jetzt die kurzfassung der kurzfassung der erklärung!


----------

