Como redimensionar uma foto dentro de Jlabel [RESOLVIDO]

24 respostas
L

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

V

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

L

Blz Sr Vini,

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

V

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

L

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

L

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…

V

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.

L

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

V

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

L

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

L

Agora ficou confuso Vini,

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

V

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.

L

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…

L

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

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

L

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…

V

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.

L

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

V

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.

L

Entendi,

Vini,

me add ai no seu msn cara,

[email removido]

E

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

L

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…

E

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

L

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