JImagePanel - Funciona uma única vez. PQ? [Resolvido]
48 respostas
peerless
Tenho uma classe que peguei aqui no site, senão me engano do vinygodoy… JImagePanel,
ela funciona beleza. Só que estou com problemas ao alterar a imagem… ela funciona só na primeira alteração, e não faço idéia pq não funciona na segunda… (quando tento utilizar o método setImg novamente)
Não tem como você alterar a imagem. Que eu me lembre, fiz a classe para ser imutável.
Você deve criar um novo JImagePanel, ou altera-la para ser mutável.
peerless
Uma dica :(
importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.swing.JPanel;/** * A panel that contains a background image. * The background image is automatically sized to fit in the panel. */publicclassJImagePanelextendsJPanel{BufferedImagebackground=null;/** Creates a new panel with the given background image. * @param img The background image. */publicJImagePanel(BufferedImageimg){if(img==null)thrownewNullPointerException("Buffered image cannot be null!");this.background=img;}/** Creates a new panel with the given background image. * @param img The background image. * @throws IOException, if the image file is not found. */publicJImagePanel(FileimgSrc)throwsIOException{this(ImageIO.read(imgSrc));}/** Creates a new panel with the given background image. * @param img The background image. * @throws IOException, if the image file is not found. */publicJImagePanel(StringfileName)throwsIOException{this(newFile(fileName));}protectedvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2d=(Graphics2D)g.create();g2d.drawImage(background,0,0,this.getWidth(),this.getHeight(),null);g2d.dispose();}}
ViniGodoy
A classe JImagePanel, do projeto Towel, permite que você altere como a imagem deve ser pintada em relação ao painel (centralizado, lado-a-lado ou redimensionada). E permite que você use esse painel como imagem de fundo: http://code.google.com/p/towel/
peerless
Bom, eu consegui de uma forma…
Removi do painel a instancia da imagem, e re-adicionei.
ai funcionou,
mas se tiver mais idéias… serão bem vindas!
abração!
peerless
ViniGodoy:
Essa aqui é um ImagePanel mutável.
Obrigadão vini! :oops:
ViniGodoy
Oi, aproveitei a deixa e inclui mais um recurso no JImagePanel.
Já uma olhada, editei o post ali em cima e deixei o novo arquivo.
peerless
Poxa bacana,
mas o que eu posso fazer com este filltype ?
(desculpe a ignorancia)
ViniGodoy
Imagine que o panel é o desktop do Windows.
Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.
ai funcionou,
mas se tiver mais idéias… serão bem vindas!
abração!
Pimg.removeAll(); this.setImg(“seucaminho”);
lepopps
Ola… tudo bem … Kara Sou Iniciante em Java … to usando o NetBeans 6.5 … vi essa classe JImagePanel … e é bem isso que eu estava procurando … mas não to conseguindo usa-la … tipo … como devo Instancia-la … ?? tipo sou bem leigo … desde ja agradeço … t+
ViniGodoy:
Imagine que o panel é o desktop do Windows.
Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.
DorPho
lepopps:
Ola.. tudo bem ... Kara Sou Iniciante em Java ... to usando o NetBeans 6.5 ... vi essa classe JImagePanel .... e é bem isso que eu estava procurando ... mas não to conseguindo usa-la .... tipo ... como devo Instancia-la .... ?? tipo sou bem leigo ..... desde ja agradeço .... t+
ViniGodoy:
Imagine que o panel é o desktop do Windows.
Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.
Eis o exemplo q o Vini postou algum tempo atrás (abaixo). Uma vez a classe JImagePanel criada, vc somente irá precisar de um Jframe com um JPanel para instancialá...
pronto! com esse trecho de code vc consegue exibir seu arquivo/image, não se esqueça de criar uma variavel de instância do tipo JImagePanel...
private JImagePanel jPrincipal;
Um abraço!
D
dbjaime
galera estou fazendo uma palicação de processamento de imagens, preciso mostrar a imagem num jFrame qualquer, estou trabalhando com BufferedImage, alguem pode me esxplicar como faço pra exibir essa imagem com essa classe JImagePanel, ou se tem outra forma melhor?
DorPho
Seguinte…
Criando o seu objeto BufferImage, crie também um objeto para armazena-lo… (do tipo JImagePanel, esta classe deverá ser mantida no mesmo pacote do seu projeto)
a blza
eu fiz isso e nao ta dando certo mas e pq eu nao add o jpanel ao frame vlw vo tenta aki qualquer coisa posto aki
vini.roggia
.
vini.roggia
Copiei esse código para dentro da minha classe TelaMenu e gostaria de saber como faço para utiliza-lo.
O que eu coloco no meu contrutor para que por exemplo o meu JPanel pnUser tenha a imagem fundo.jpg como background?
M
marcoscorso
como fazer para chamar essa classe no meu projeto ?
ja adicionei essa classe ao pacote
ViniGodoy
Igual vc adicionaria um painel qualquer.
jedsc91
eu to com probelma c/ o setImage(String) dessa classe,
eu coloco o caminho da imagem, mas ele da erro dizendo q ele não encontra o caminho dela…
eu usei o msm caminho em um icone de um botão e deu certinho…
eu coloquei dentro de um try normalz…
ViniGodoy
Pode colocar aqui o código que deu certo e o que deu errado?
desculpa incomoda de novo :oops:
é q eu procurei e não achei solução…=/
mas é q eu testei o código e qnd eu fui implementa ele me retorna um erro dizendo q :
non-static method getClass() cannot be referenced from a static context
evertonsilvagomesjav
jedsc91:
desculpa incomoda de novo :oops:
é q eu procurei e não achei solução....=/
mas é q eu testei o código e qnd eu fui implementa ele me retorna um erro dizendo q :
non-static method getClass() cannot be referenced from a static context
usa assim:
BufferedImage bi = ImageIO.read(this.getClass().getResource("/icon/LOGO.png"));
seuImagePanel = new JImagePanel(bi);
this.getContentPane().add(seuImagePanel);
lembrando que sua imagem tem que estar dentro do src
jedsc91
vlw msm everton, vo testa ainda hj esse código, brigadao msm pela ajuda
tiagocampos65
No JInternelFrame é só você add um JLabel no BorderLayout.CENTER e inserir uma imagem no JLabel.
O único porém é que você terá que implementar um método para redimensionar a tela conforme o tamanho do Form.
D
dere
Pessoal, estou com programa q adiciona a um jPanel vários jLabel com uma imagem em cada jLabel, agora estou precisando modificar o tamanho da imagem q eu inseri em cada jLabel. Então o ViniGodoy me recomendou a classe JImagePanel em lugar dos JLabel, só q com o codigo q eu implementei ñ esta adicionando nada ao jPanel principal. Ta ai o codigo
JImagePanelnovo=null;try{novo=newJImagePanel(aux);// aux é uma String contendo o caminhonovo.setFillType(JImagePanel.FillType.RESIZE);novo.setSize(100,100);novo.setImage(aux);}catch(IOExceptionex){Logger.getLogger(Interface_TrView.class.getName()).log(Level.SEVERE,null,ex);}jPanel1.add(novo);jPanel1.repaint();jPanel1.validate();JOptionPane.showMessageDialog(null,novo);// aqui nesse JOptionPane mostra a imagem q eu quero, só q no painel principal ñ mostra nada,// e ainda por cima no metodo jPanel1.getComponentCount() que é o metodo q retorna //a quantidade de componentres do painel ta retornando zero
habinovich
Uma duvida Vini…
gostaria de saber se com a sua class da para fazer o seguinte…
to criando uma tela para cadastro de cliente e nele gostaria colocar um Jpanel para receber a foto do cliente cadastrado…
ter a opção para Upa a foto do pc para uma pasta ou banco do sistema…
att…
ViniGodoy
É uma classe do Swing, para aplicações desktop. O que vc quer dizer com “upar”?
habinovich
to usando para desktop msm, UPar q to falando e carregar a foto de qualquer pasta no pc para uma pasta ou banco no sistema…
Ja tenho aki minha JPanel e Jbutton para abrir uma JDialog… que va abrir o local de busca da Imagem.
ViniGodoy
O JImagePanel só exibe imagens.
O resto é você que tem que fazer com o Java.
habinovich
vc poderia me dar uma dica de como fazer para ele fazer da forma dessa forma…
tem o campo la para receber a imagem carregada apartir do botao q criei para abrir a janela de busca da imagem…
jedsc91
cara, não seria o caso de vc buscar o caminho da imagem… talvez vc poderia copiar essa imagem buscada para uma pasta especifica, daew vc guarda no seu B.D. somente o novo caminho da imagem… vc implementa um atributo em sua classe com o caminho da imagem, qnd a pessoa pesquisar o cliente o programa retorna o caminho da imagem dele, então vc usa o componente q suporta a imagem…
adriano_kahn
oi Viny… essa classe jImagePanel foi vc que desenvolveu? aonde baixo ela para usar no NetBeans?
obrigado
ViniGodoy
No site do projeto towel. O link está na minha assinatura.
O Mark também escreveu um tuto para ela:
X
X_Christiano_X
Vini, sou bem iniciante e estou desenvolvendo uma interface toda q estou fazendo no netbeans pela tela de visualização da interface…
tem alguma maneira de eu usar essa classe q vc desenvolveu pra colocar uma imagem como plano de fundo através da tela de visualização??
vlw
ViniGodoy
Ainda não, para isso teremos que altera-la para ter um construtor vazio.
AssemblyXP
Vinny… tem como colocar um ZOOM nesse painel? dê uma dica… estou tentado aki e nada…
ViniGodoy
Sim, bastaria ajustar o AffineTransform antes do desenho.
AssemblyXP
como assim… ?? AffineTransform
estou tentando alterar no FILLTYPE incrementando um ZOO_IN que ajusta pelo tamanho que sera passado…
AssemblyXP
estou tentando colocar também um JScrollPane no JImagePanel… mais ta dando erro adicionando o componente