Como redimensionar uma foto dentro de Jlabel [RESOLVIDO]
24 respostas
L
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{JFileChooserBusca_foto=newJFileChooser();Busca_foto.setCurrentDirectory(newFile("/foto/"));Busca_foto.setDialogTitle("Carregando foto do membro");Busca_foto.showOpenDialog(this);Stringfoto=""+Busca_foto.getSelectedFile().getName();tf_foto.setText(foto);lb_foto.setIcon(newImageIcon("/foto/"+tf_foto.getText()));}catch(Exceptionerro){}
mas como faço para instanciar o objeto dessa classe???
V
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);
L
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??
L
lincolngadea
Estou fazendo assim:
JFileChooserBusca_foto=newJFileChooser();Busca_foto.setCurrentDirectory(newFile("/foto/"));Busca_foto.setDialogTitle("Carregando foto do membro");Busca_foto.showOpenDialog(this);Stringfoto=""+Busca_foto.getSelectedFile().getName();tf_foto.setText(foto);BufferedImageimg=ImageIO.read(getClass().getResourceAsStream("/foto/"+tf_foto.getText()));JImagePanelimgPanel=newJImagePanel(img);lb_foto.add(imgPanel);
Mas não funciona…
V
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:
JFileChooserbuscaFoto=newJFileChooser();buscaFoto.setCurrentDirectory(newFile("/foto/"));buscaFoto.setDialogTitle("Carregando foto do membro");if(buscaFoto.showOpenDialog(this)!=JFileChooser.APPROVE_OPTION)return;Filefoto=buscaFoto.getSelectedFile();tf_foto.setText(foto.getFileName());JImagePanelimgPanel=newJImagePanel(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
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??
V
ViniGodoy
Você não pode colocar o painel dentro de um JLabel.
Ele irá no lugar do JLabel, a imagem será desenhada dentro dele.
L
lincolngadea
Na verdade é o contrário, o Jlabel dentro do Painel…
L
lincolngadea
Agora ficou confuso Vini,
Como eu vou chamar o método setImage se ele não tem na classe JImagePanel…??
V
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.
L
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…
L
lincolngadea
Vini, estou fazendo desse jeito…
JFileChooserbuscaFoto=newJFileChooser();buscaFoto.setCurrentDirectory(newFile("/foto/"));buscaFoto.setDialogTitle("Carregando foto do membro");if(buscaFoto.showOpenDialog(this)!=JFileChooser.APPROVE_OPTION)return;Filefoto=buscaFoto.getSelectedFile();tf_foto.setText(foto.getName());JImagePanelimgPanel=newJImagePanel(foto);painelimagem.add(imgPanel);
Busca a foto, seta no textfield mas não aparece no Jlabel e nem no painel
E
edufera10
// o metodo abaixo carrega uma nova imagem em um jlabel// e tbm seta o tamanho da imagem de acordo com o labelpublicvoidcarregaFoto(){javax.swing.JFileChooserjfc=newjavax.swing.JFileChooser();jfc.setMultiSelectionEnabled(false);jfc.setDialogTitle("Selecione a foto do Colaborador");jfc.setFileFilter(newFileNameExtensionFilter("JPG, GIF e PNG","jpg","gif","png","bmp"));//nao entendi pq tem que repetir as extencoesthis.jLFoto.setText("");// a linha abaixo mostra o nome do arquivo no campo file name//dentro da janela do jfcjfc.setFileSelectionMode(JFileChooser.FILES_ONLY);// ha outras opcoes alem de files_onlyintresposta=jfc.showOpenDialog(this);//este if determina o que o programa faz ao se clicar no // botao de carregar ou cancelar dentro do jfcif(resposta==0){// se clica em carregar imagem faz isso...Imageimg=newImageIcon(jfc.getSelectedFile().getAbsolutePath()).getImage().getScaledInstance(150,150,Image.SCALE_DEFAULT);jLFoto.setIcon(newImageIcon(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
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…
V
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.
L
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…?
V
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.
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
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…
E
edufera10
mas como você vai fazer, vc quer jogar a imagem no banco de dados?
L
lincolngadea
Não, não,
na verdade jogo no banco só o caminho, mas já consegui resolver, muito obrigado…