Descarregar imagem de arquivo [Resolvido]

6 respostas
Allexb10

Boa Tarde,

Estou implementando um sistema e em determinadas telas,
tenho que importar imagens (ou tira-las com webcam), para identificação.

Gostaria de saber se há uma forma de quando eu abrir a pasta de arquivos
para importar a imagem, tem como eu visualizar as imagens antes de escolher?
Por exemplo quando selecionamos um arquivo, mostrar a imagem ao lado antes de baixar
para a aplicação.

Ou seja, no explorer tem as opções de visualização, como lista, detalhes, icones grandes… etc.
quando chamo a tela para escolher o arquivo, aparecem apenas duas opções:
lista e detalhes. Queria que tivesse por exemplo como visualizar antes.

6 Respostas

mauricioadl

pelo que eu saiba o JFileChooser não faz isso.

Allexb10

Sim, gostaria de saber se há alguma forma de fazer isto.
Ou com JFileChooser ou de outra forma.

mauricioadl

então, fui fazer uma pesquisa e vi que tem um tal de FileView que vc cria os icones. talvez de pra fazer oq vc quer.
exemplo:
http://www.java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileViewFileViewfileView.htm

no pior dos casos, fazer um filechooser de imagens na “unha” nao deve ser tao dificil.

[]'s

mauricioadl
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JPanel;

public class ImagePreviewPanel extends JPanel implements PropertyChangeListener {

	private static final long serialVersionUID = 2818093906032707079L;
	private int width, height;
	private ImageIcon icon;
	private Image image;
	private static final int ACCSIZE = 155;
	private Color bg;

	public ImagePreviewPanel() {
		setPreferredSize(new Dimension(ACCSIZE, -1));
		bg = getBackground();
	}

	public void propertyChange(PropertyChangeEvent e) {
		String propertyName = e.getPropertyName();

		if (propertyName.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
			File selection = (File) e.getNewValue();
			String name;

			if (selection == null)
				return;
			else
				name = selection.getAbsolutePath();

			if ((name != null) && name.toLowerCase().endsWith(".jpg")
					|| name.toLowerCase().endsWith(".jpeg")
					|| name.toLowerCase().endsWith(".gif")
					|| name.toLowerCase().endsWith(".png")) {
				icon = new ImageIcon(name);
				image = icon.getImage();
				scaleImage();
				repaint();
			}
		}
	}

	private void scaleImage() {
		width = image.getWidth(this);
		height = image.getHeight(this);
		double ratio = 1.0;
		if (width >= height) {
			ratio = (double) (ACCSIZE - 5) / width;
			width = ACCSIZE - 5;
			height = (int) (height * ratio);
		} else {
			if (getHeight() > 150) {
				ratio = (double) (ACCSIZE - 5) / height;
				height = ACCSIZE - 5;
				width = (int) (width * ratio);
			} else {
				ratio = (double) getHeight() / height;
				height = getHeight();
				width = (int) (width * ratio);
			}
		}

		image = image.getScaledInstance(width, height, Image.SCALE_DEFAULT);
	}

	public void paintComponent(Graphics g) {
		g.setColor(bg);
		g.fillRect(0, 0, ACCSIZE, getHeight());
		g.drawImage(image, getWidth() / 2 - width / 2 + 5, getHeight() / 2
				- height / 2, this);
	}

}
mauricioadl

JFileChooser chooser = new JFileChooser(); ImagePreviewPanel preview = new ImagePreviewPanel(); chooser.setAccessory(preview); chooser.addPropertyChangeListener(preview); chooser.showOpenDialog(null);

Allexb10

Valeu Mauricio, deu certinho.

Abraço!

Criado 16 de abril de 2012
Ultima resposta 16 de abr. de 2012
Respostas 6
Participantes 2