Como redimensionar uma foto dentro de Jlabel [RESOLVIDO]

Ai pessoal,

Como faço para redimensionar uma foto automaticamente dentro do Jlabel??? olha como está meu projeto:

Botão de caminho da imagem:


 try {
            JFileChooser Busca_foto = new JFileChooser();
            Busca_foto.setCurrentDirectory(new File("/foto/"));
            Busca_foto.setDialogTitle("Carregando foto do membro");
            Busca_foto.showOpenDialog(this);
            String foto = "" + Busca_foto.getSelectedFile().getName();
            tf_foto.setText(foto);
            lb_foto.setIcon(new ImageIcon("/foto/" + tf_foto.getText()));

        } catch (Exception erro) {
        }

mostrar a imagem:

 tf_foto.setText(con_membros.resultSet.getString("MEM_FOTO"));
            lb_foto.setIcon(new ImageIcon("/foto/" +tf_foto.getText()));

Como posso implementar esse projeto ???

Algumas classes podem fazer isso para você: http://www.guj.com.br/posts/list/56248.java#295271

Blz Sr Vini,

mas como faço para instanciar o objeto dessa classe???

JImagePanel imgPanel = new JImagePanel("C:/imagem.jpg"); seuPainel.add(imgPanel);

Se precisar carregar a imagem a partir de um Resource:

BufferedImage img = ImageIO.read(getClass().getResourceAsStream("C:/imagem.jpg")); JImagePanel imgPanel = new JImagePanel(img); seuPainel.add(imgPanel);

Vini, não me leva a mau cara, mas vou lhe fazer mais uma pergunta,

é que na verdade estou começando agora com java então la vai:

Entendi o funcionamento desse classe blz,

Mas o que não consigo entender é como ela vai buscar no diretorio a foto, setar em um textField e pegar o resultado e imprimir no Jlabel, como no código que enviei no início…

então ai vai a pergunta:

eu instancio o objeto em que lugar? mantenho os códigos iniciais ou não??

Estou fazendo assim:

 JFileChooser Busca_foto = new JFileChooser();
            Busca_foto.setCurrentDirectory(new File("/foto/"));
            Busca_foto.setDialogTitle("Carregando foto do membro");
            Busca_foto.showOpenDialog(this);
            String foto = "" + Busca_foto.getSelectedFile().getName();
            tf_foto.setText(foto);
            BufferedImage img = ImageIO.read(getClass().getResourceAsStream("/foto/" +tf_foto.getText()));
            JImagePanel imgPanel = new JImagePanel(img);
            lb_foto.add(imgPanel);

Mas não funciona…

Claro o getResource() é feito para abrir recursos. Recursos são arquivos que ficam no ClassPath da aplicação. Se o usuário vai abrir através de um JFileChooser, então trata-se de um File, não de um recurso.

Nesse caso, use o jeito mais simples:

[code]JFileChooser buscaFoto = new JFileChooser();
buscaFoto.setCurrentDirectory(new File("/foto/"));
buscaFoto.setDialogTitle(“Carregando foto do membro”);
if (buscaFoto.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
return;

File foto = buscaFoto.getSelectedFile();
tf_foto.setText(foto.getFileName());
JImagePanel imgPanel = new JImagePanel(foto);
lb_foto.add(imgPanel); [/code]

O que é lb_foto?

Eu sugiro que você adicione o JImagePanel apena uma única vez. Nas próximas trocas de foto, simplesmente chame:

imgPanel.setImage(foto);

E não dê add novamente. Você pode até mesmo adicionar um ImagePanel vazio na construção de seu form, onde a foto deverá aparecer.

lb_foto é um jlabel,

eu imprimo a imagem no jpanel ou no Jalbel?

além da sua sugestão existe mais algum erro na instrução??

Você não pode colocar o painel dentro de um JLabel.
Ele irá no lugar do JLabel, a imagem será desenhada dentro dele.

Na verdade é o contrário, o Jlabel dentro do Painel…

Agora ficou confuso Vini,

Como eu vou chamar o método setImage se ele não tem na classe JImagePanel…??

[quote=lincolngadea]Agora ficou confuso Vini,

Como eu vou chamar o método setImage se ele não tem na classe JImagePanel…??[/quote]

Como não? Acabei de abrir a classe aqui, e tem 3 versões do método setImage nela.

kkkk,

Vini me desculpe, eu estava usando outra classe, por isso estava confuso, só agora percebi que tinha o download da classe completa no forum, vou implementar e te digo…

vlw pela paciencia…hehe

espero que resolva,

abs…

Vini, estou fazendo desse jeito…

          JFileChooser buscaFoto = new JFileChooser();    
buscaFoto.setCurrentDirectory(new File("/foto/"));    
buscaFoto.setDialogTitle("Carregando foto do membro");    
if (buscaFoto.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)   
    return;  
  
File foto = buscaFoto.getSelectedFile();  
tf_foto.setText(foto.getName());    
JImagePanel imgPanel = new JImagePanel(foto);    
painelimagem.add(imgPanel);  

Busca a foto, seta no textfield mas não aparece no Jlabel e nem no painel

// o metodo abaixo carrega uma nova imagem em um jlabel
// e tbm seta o tamanho da imagem de acordo com o label
public void carregaFoto(){
    javax.swing.JFileChooser jfc = new javax.swing.JFileChooser();
jfc.setMultiSelectionEnabled(false);
jfc.setDialogTitle("Selecione a foto do Colaborador");
jfc.setFileFilter(new FileNameExtensionFilter("JPG, GIF e PNG", "jpg", "gif", "png","bmp"));//nao entendi pq tem que repetir as extencoes
this.jLFoto.setText("");

// a linha abaixo mostra o nome do arquivo no campo file name
//dentro da janela do jfc
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);// ha outras opcoes alem de files_only
int resposta = jfc.showOpenDialog(this);
       //este if determina o que o programa faz ao se clicar no 
       // botao de carregar ou cancelar dentro do jfc
       if (resposta ==0){
       // se clica em carregar imagem faz isso...
        Image img = new ImageIcon(jfc.getSelectedFile().getAbsolutePath()).getImage().getScaledInstance(150, 150, Image.SCALE_DEFAULT);
        jLFoto.setIcon(new ImageIcon(img));    
        }
       if (resposta ==1){
       //se a pessoa clica em cancelar nao faz nada...
       }
}

fiz esse código faz um tempo já nem lembro mais qq passava na minha cabeça mas funciona ta ai pra vc conferir alterar e dar risada falow

kkkkkkkkkkkkkkkkkkkkkkk

rs
rs

É verdade Edu,

agora é só rolar de rir, vlw cara, funcionou,

“Vini, muito obrigado tb cara, vc me ajudou muito falou…”

até mais rapaziada…

Jamais faça ifs como esse:

if (resposta ==0){  

Veja que 0 é um número mágico. Prefira sempre usar as constantes, que o próprio FileChooser define:

if (resposta ==JFileChooser.APPROVE_OPTION){  

Assim fica claro o que o if significa.

É verdade, eu tinha me atentado a isso quando dei uma analisada no outro código que me mandou, acrescentei tambem o setCurrentDirectory pra definir o caminho do diretório, ficou bem legal,

Agora o que estava tentando entender naquela implementação sua é pq vc preferiu setar a imagem no painel e não no label… se é que entendi certo…?

Uma das perguntas clássicas do GUJ é:
“Como colocar uma imagem de fundo no meu JPanel?”

Aquele painel é exatamente isso, um painel que tem uma imagem de fundo.

Entendi,

Vini,

me add ai no seu msn cara,

lincolngadea@despcompany.com