Bild in JLabel skalieren

Alublech

Mitglied
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?

Java:
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();

}

}

Java:
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
		
	}

}
 
Java:
	        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();
Was soll das werden?
Code:
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"
 
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
 
Das ginge nach dem Schema myImageIcon.setImage(myImageIcon.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
 

Zurück
Oben