# FileChooser Bilder auswählen



## MayYes (26. Mai 2010)

Einen schönen guten Abend,

hänge hier gerade bei einer Augabe fest und finde nirgendswo eine Lösung 
Ich soll mit dem FileChooser ein Bild auswählen und dieses wird dann auf meinem Panel (BorderLayout Center) angezeigt. Nur wie sag ich dem FileChooser das er nur Bilder (jpeg) nehmen darf und er es auf meinem Panel anzeigt? 
Hier mein Code:

```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.imageio.ImageIO;

public class Layout extends JFrame{
	
	private final static int width = 500;
	private final static int height = 400;
	
	public Layout(){
		super();
		setSize(width, height);
		addWindowListener(new WindowDestroyer( ));
		setTitle("Bilder aus Datei und aus dem WWW laden..");
		Container content = getContentPane( );
		
		content.setLayout(new BorderLayout( ));
		
		JPanel sout = new JPanel();
		sout.setLayout(new FlowLayout());
		content.add(sout, BorderLayout.SOUTH);
		JButton open = new JButton("Bild aus Datei laden");
		JButton url = new JButton("Bild aus URL laden");
		sout.add(open);
		sout.add(url);
	
		open.addActionListener(new open());
		url.addActionListener(new url());
		
		JPanel thumb = new JPanel();
		content.add(thumb, BorderLayout.WEST);
		
		JPanel big = new JPanel();
		content.add(big, BorderLayout.CENTER);
	}
	
	class open implements ActionListener{
		public void actionPerformed(ActionEvent e){
			JFileChooser chooser = new JFileChooser();
			chooser.showOpenDialog(Layout.this);
		}
	}
	
	class url implements ActionListener{
		public void actionPerformed(ActionEvent e){
			
		}
	}
}
```

Die anderen Sachen (Bild aus URL etc.) sind erstmal unwichtig. Freue mich über jede Hilfe.

LG MayYes


----------



## eRaaaa (26. Mai 2010)

MayYes hat gesagt.:


> Nur wie sag ich dem FileChooser das er nur Bilder (jpeg) nehmen darf und er es auf meinem Panel anzeigt?




Das steht bestimmt hundertfach hier im Forum und Millionen mal bei google 

Benutze einen Filter, ein Beispiel (ui sogar passend für dein Problem *g* )  gibt es hier


----------



## MayYes (26. Mai 2010)

ok, gut. Danke erstmal 
Habs jetzt hinbekommen das nur Bilderdateien angezeigt werden. Krieg es aber beim besten Willen nicht hin, das sie auf meinem Label angezeigt werden 
Was muss ich in diesem Befehl reinschreiben?

```
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
				???
			}
```

Vielen Dank für die Hilfe

LG MayYes


----------



## eRaaaa (26. Mai 2010)

Öhh.. wahrscheinlich irgendwas in diese Richtung:

```
label.setIcon(new ImageIcon(chooser.getSelectedFile().getAbsolutePath()));
```

???:L


----------



## MayYes (26. Mai 2010)

Oh man, iwie hab ich echt keine Ahnung....
So sieht es bisher aus:

```
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageFilter;
import java.io.File;

import javax.imageio.ImageIO;

public class Layout extends JFrame{
	
	private final static int width = 500;
	private final static int height = 400;
	
	public Layout(){
		super();
		setSize(width, height);
		addWindowListener(new WindowDestroyer( ));
		setTitle("Bilder aus Datei und aus dem WWW laden..");
		Container content = getContentPane( );
		
		content.setLayout(new BorderLayout( ));
		
		JPanel sout = new JPanel();
		sout.setLayout(new FlowLayout());
		content.add(sout, BorderLayout.SOUTH);
		JButton open = new JButton("Bild aus Datei laden");
		JButton url = new JButton("Bild aus URL laden");
		sout.add(open);
		sout.add(url);
	
		open.addActionListener(new open());
		url.addActionListener(new url());
		
		JPanel thumb = new JPanel();
		content.add(thumb, BorderLayout.WEST);
		
		JPanel big = new JPanel();
		content.add(big, BorderLayout.CENTER);
	}
	
	class open implements ActionListener{
		public void actionPerformed(ActionEvent e){
			Container content = getContentPane();
			JFileChooser chooser = new JFileChooser();
			chooser.setAcceptAllFileFilterUsed(false);
	
			chooser.setFileFilter(new FileFilter(){
				String description = "jpg Dateien";
				String extension = "jpg";
				
				public boolean accept(File f) {
					if(f == null) 
						return false;
					if(f.isDirectory())
						return true;
					return f.getName().toLowerCase().endsWith(extension);
				}

				public String getDescription() {
					return description;
				}
			});

			if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
				???
			}
		}
	}
	
	class url implements ActionListener{
		public void actionPerformed(ActionEvent e){
			
		}
	}
}
```

so richtig verstanden hab ich das nicht, was ich deinen Befehl dort:

```
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
				???
			}
```
einfüge.

LG MayYes


----------



## eRaaaa (26. Mai 2010)

MayYes hat gesagt.:


> Oh man, iwie hab ich echt keine Ahnung....



ich auch nicht, denn



MayYes hat gesagt.:


> Krieg es aber beim besten Willen nicht hin, das sie auf meinem Label angezeigt werden



ich sehe in deinem Code keine Labels ?!

Dadurch dass du deine Variablen relativ gut benannt hast, könnte man erahnen dass du evtl. Panels meintest, anstelle von Label? Willst du im Panel 
	
	
	
	





```
thumb
```
 ein Thumbnail und in Panel 
	
	
	
	





```
big
```
 das Bild in Originalgröße anzeigen? Dann könnte man evtl. dennoch das Ganze mit Labels machen, sprich du addest in die Panels jeweils ein JLabel und rufst dann darauf setIcon auf(siehe mein Code), oder man malt es selbst, dann müsstest du die paintCOmponent-Methode der Panels überschreiben!


----------



## MayYes (26. Mai 2010)

:>
Ja, ich meinte Panels. Hast es schon richtig beschrieben. Thumb als Thumbnail und big als Original.
Und das liegt mein Problem, wie geht das? Alle Versuche waren bisher erfolglos.


----------



## eRaaaa (26. Mai 2010)

Weil ich gerade eh aufs entpacken warten muss...


```
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Comment here
 * 
 * @author eRaaaa
 * @version 26.05.2010
 * @since
 */

public class ImageViewer {

	private JPanel panel, thumb, big;
	private Image image;
	private JLabel thumbImage = new JLabel(), bigImage = new JLabel();
	private JFrame frame;

	public ImageViewer() {
		frame = new JFrame();

		JButton btn = new JButton("Lade Bild");
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
					try {
						image = ImageIO.read(chooser.getSelectedFile());
						bigImage.setIcon(new ImageIcon(image));
						thumbImage.setIcon(getThumbnail(image));
						frame.pack();
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
			}
		});
		panel = new JPanel(new BorderLayout());
		thumb = new JPanel();
		thumb.add(thumbImage);
		big = new JPanel();
		big.add(bigImage);
		panel.add(thumb, BorderLayout.LINE_START);
		panel.add(btn, BorderLayout.PAGE_END);
		panel.add(big, BorderLayout.CENTER);
		frame.add(panel);
		frame.setSize(800, 800);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	protected Icon getThumbnail(Image image) {
		int newX = image.getWidth(null) / 2;
		int newY = image.getHeight(null) / 2;
		BufferedImage thumb = new BufferedImage(newX, newY, BufferedImage.TYPE_INT_RGB);
		Graphics g = thumb.createGraphics();
		g.drawImage(image, 0, 0, newX, newY, null);
		g.dispose();
		return new ImageIcon(thumb);

	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new ImageViewer();
			}
		});
	}
}
```

sollte dir weiterhelfen... sonst --> :rtfm:


----------



## MayYes (27. Mai 2010)

Hey, super dank dir. Wäre doch nicht nötig gewesen. Damit lässt sich aufjedenfall was anfangen.
1000Dank und wünsche dir eine Gute Nacht.

LG MayYes


----------

