Como redimensionar uma imagem importada do JFileChooser para um JLabel
7 respostas
D
Diego_Microfenix
Bom dia pessoal, minha dúvida é a seguinte, preciso de redimensionar a imagem sem que aumente o JFrame ou desloque os componentes próximos!
Consegui redimensionar automaticamente do tamanho que eu quiser, mas mesmo em tamanhos menores o meu JFRame acaba alterando seu tamanho.
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Escolha a Imagem");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
LFoto.setVisible(true);
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File arquivo = fileChooser.getSelectedFile();//arquivo
BufferedImage bi = null;
bi = ImageIO.read(arquivo);
BufferedImage aux = new BufferedImage(100, 80, bi.getType());
Graphics2D g = aux.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance((double) 100 / bi.getWidth(), (double) 80 / bi.getHeight());
g.drawRenderedImage(bi, at);
LFoto.setIcon(new ImageIcon(aux));
LFoto.setText(null);
}
Vc tá fazendo isso dinamicamente?Tipo escolhe-e-muda toda hora?
Pode fazer algo + ou - assim:
File file = fc.getSelectedFile();//
imagem=new ImageIcon(file.getPath());//pega o caminho da imagem
novaImagem=new ImageIcon(imagem.getImage().//pega a imagem com novo tam
getScaledInstance(90, -1, Image.SCALE_DEFAULT));
atualizaLabel(novaImagem);//método que atualiza sua IMG no JLabel
repaint(); //atualiza o JLabel com a img selecionada
//Limpa o File Chooser para a próxima vez que for mostrado .
fc.setSelectedFile(null);
seu atualizaLabel:
//método responsável por atualizar a imagem q é mostrada no rótulo
private void atualizaLabel(ImageIcon icon){
img.setIcon(icon);
//img é seu JLabel
if (icon != null) {
img.setText(null);
//img é seu JLabel
} else {
img.setText("Imagem não disponível!");
}
}
E não se esqueça do paintComponent:
Desculpem, mas acho que não me expressei corretamente; seria assim o que preciso, é que estou construindo um cadastro com vários dados e também gostaria de armazenar a foto do individuo cadastrado, mas ao selecionar pelo JFilechooser, e setá-lo por um JLabel dentro de um JPanel este que está alterando o tamanho de seu layout, queria que ao setar a foto no JLabel, o JPanel pudesse permanecer do seu tamanho original.
Desculpem, mas é que iniciei faz pouco tempo em Java! Mas valeu a todos que continuam a me ajudar!
Ironlynx
Diego_Microfenix,
o código que eu postei acima ajuda a redimensionar a imagem de JLabel.Mas se vc quer controle mesmo sobre o redimensionamento, use o código do JImagePanel do ViniGodoy no link que eu postei acima(chamei errôneamente de ImageIcon)
Bom dia pessoa, estou agora tentando usar esta classe do JImagePanel, tentei implementar no meu evento, compila mas ainda não exibe a imagem no JPanel que já está no JFrame;
segue meu código no evento:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Escolha a Foto");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File arquivo = fileChooser.getSelectedFile();
BufferedImage bi =ImageIO.read(arquivo);
BufferedImage aux = new BufferedImage(100, 80, bi.getType());
Graphics2D g = aux.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(WIDTH, WIDTH);
JImagePanel PFoto = new JImagePanel (aux);
g.drawRenderedImage(bi, at);
PFoto.setImage(aux);
}
D
Diego_Microfenix
Bom, modifiquei meu código novamente, acho que agora estou no caminho certo! Mas ainda não consigo apresentar a imagem selecionada no JImagePanel dentro do meu JPanel!!!
Segue meu código:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Escolha a Foto");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File arquivo = fileChooser.getSelectedFile();
BufferedImage bi =ImageIO.read(arquivo);
JImagePanel PainelFoto = new JImagePanel(bi);
PFoto.add(PainelFoto, BorderLayout.CENTER);