# Bild in JLabel skalieren



## Alublech (13. Nov 2012)

Hallo Leute,
ich versuche gerade das Bild in einem JLabel zu skalieren. Das Bild wird zurzeit in einem String gespeichert und dann auf dem JLabel in einem neuen Icon angezeigt. Nun habe ich den Code für die Skalierung geschrieben, aber es geht nicht weil es ein String ist. Könnt ihr mir da helfen?


```
import javax.swing.JFrame;



public class Start {

public Start()

{
}

public static void main( String[] args ) {

	Window theWindow = new Window();
	theWindow.setBounds(10, 10, 1000, 800);
	theWindow.setResizable(false);
	theWindow.setLocationRelativeTo(null);
	theWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	theWindow.setTitle("Location Checker Alpha 0.1");
	theWindow.show();

}

}
```


```
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.InputStream;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileNameExtensionFilter;


public class Window extends JFrame implements ActionListener {
	
	JButton		b_exit;
	JButton		b_picture;
	JLabel 		label;
	Border 		border;
	
	public Window() {
		this.getContentPane().setLayout(null);
		this.initWindow();
		
	}

	protected void initWindow() 
	{
		// Instanzieren:
		Border border = LineBorder.createGrayLineBorder();
		b_exit = new JButton("Beenden");
		b_picture = new JButton("Bild öffnen");
		label = new JLabel();
		label.setBorder(border);
	    
	    
		b_picture.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				buttonPictureClicked(arg0);
			}

		});

		// Positionen festlegen
		b_exit.setBounds(800,500,100,30);
		b_exit.addActionListener(this);
		b_picture.setBounds(300,110,100,30);
		b_picture.addActionListener(this);
		label.setBounds(300,300,500,500);

		// Elemente dem Fenster hinzufügen:
		this.getContentPane().add(b_exit);
		this.getContentPane().add(b_picture);
		this.getContentPane().add(label, "Center");

		this.pack();
	}
	
	public void buttonPictureClicked(ActionEvent evt)
	{
		Object source = evt.getSource();
	    if (source == b_picture) {
	      JFileChooser chooser = new JFileChooser();
	      chooser.setCurrentDirectory(new File("."));

	      chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
	        public boolean accept(File f) {
	          return f.getName().toLowerCase().endsWith(".jpg")
	              || f.isDirectory();
	        }

	        public String getDescription() {
	          return "JPG Images";
	        }
	      });

	      int r = chooser.showOpenDialog(this);
	      if (r == JFileChooser.APPROVE_OPTION) {
	        String name = chooser.getSelectedFile().getAbsolutePath();
	        int scale = 4;
	        BufferedImage bi = new BufferedImage(
	                scale*name.getIconWidth(),
	                scale*name.getIconHeight(),
	                BufferedImage.TYPE_INT_ARGB);
	            Graphics2D g = bi.createGraphics();
	            g.scale(scale,scale);
	            name.paintIcon(null,g,0,0);
	            g.dispose();
			label.setIcon(new ImageIcon(bi));
	      }
	    } else if (source == b_exit)
	      System.exit(0);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

}
```


----------



## Michael... (13. Nov 2012)

Alublech hat gesagt.:


> ```
> String name = chooser.getSelectedFile().getAbsolutePath();
> int scale = 4;
> BufferedImage bi = new BufferedImage(
> ...


Was soll das werden? 
	
	
	
	





```
name
```
 ist ein String und besitzt keine Methoden getIconWidth o.ä. Du müsstest zumindest mal das Bild von der Platte in eine ImageIcon, Image o.ä. "laden"


----------



## Alublech (15. Nov 2012)

Gibt es nicht eine Möglichkeit den Inhaltes des Strings(in dem Fall das Bild) in ein ImageIcon umzuwandeln. Ich brauche den String, da "chooser.getSelectedFile().getAbsolutePath();" nur mit einem String funktioniert.

gruß
Alublech


----------



## bERt0r (15. Nov 2012)

Das ginge nach dem Schema myImageIcon.setImage(myImageIcon.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));


----------



## bygones (15. Nov 2012)

Alublech hat gesagt.:


> Gibt es nicht eine Möglichkeit den Inhaltes des Strings(in dem Fall das Bild) in ein ImageIcon umzuwandeln. Ich brauche den String, da "chooser.getSelectedFile().getAbsolutePath();" nur mit einem String funktioniert.
> 
> gruß
> Alublech


der String den du bekommst ist der Dateiname bzw pfad, nicht das bild ansich... schau dir mal How to Use Icons (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) an


----------

