Como redimensionar uma foto dentro de Jlabel [RESOLVIDO]

24 respostas
lincolngadea

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

24 Respostas

ViniGodoy

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

lincolngadea

Blz Sr Vini,

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

ViniGodoy

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);

lincolngadea

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

lincolngadea

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…

ViniGodoy

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:

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);

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.

lincolngadea

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

ViniGodoy

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

lincolngadea

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

lincolngadea

Agora ficou confuso Vini,

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

ViniGodoy

lincolngadea:
Agora ficou confuso Vini,

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

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

lincolngadea

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…

lincolngadea

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

edufera10
// 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

lincolngadea

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…

ViniGodoy

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.

lincolngadea

É 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…?

ViniGodoy

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.

lincolngadea

Entendi,

Vini,

me add ai no seu msn cara,

[email removido]

edufera10

ViniGodoy:
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.

então kra como eu falei eu nem sei qq eu tinha na cabeça quanto eu fiz esse código foi bem no começo do java na minha vida pelo amor de Deus edita o código ai hahahha
falow

lincolngadea

Edu, me tira uma dúvida,

e se eu quizer agora apenas visualizar a imagem que foi carregada, tipo quando eu for passando pelos cadastros…

edufera10

mas como você vai fazer, vc quer jogar a imagem no banco de dados?

lincolngadea

Não, não,

na verdade jogo no banco só o caminho, mas já consegui resolver, muito obrigado…

F

edufera10

MUIO OBRIGADO

FUNCIONOU PERFEITAMENTE

Criado 8 de abril de 2010
Ultima resposta 8 de out. de 2010
Respostas 24
Participantes 4