Boa noite Pessoal, so novo aki no forum e novo tbm em app. c/ Swing + NetBeans …
To fazenu um cadastro q carrega várias imagens de um Banco de Dados porém vi na net q tem N jeito , os + comuns são
através do repaint() do JPanel inserindo um ImageIcon nele e o JLabel.setIcon .
Alguém por favor sabe me dizer o PQ e QUAL dos 2 é mais eficaz PARA APENAS CARREGAR AS IMAGENS + rápido.
eu fiz um componente que herda de JLabel e tem algumas operações que facilitam a manutenção da foto quando gravada como tipo bytea no banco. Se o seu caso for esse posso te passar o componente… se for só carregar a imagem sem precisar salvar ela no banco use o JLabel mesmo…
Boa noite Erico_KL , se puder passar agradeço cara , sobre a minha dúvida sobre qual era a mais rápida eu num achei tbm a resposta , PORÉM achei meia resposta , q é add. num JLabel pelo menos pra implementar é mais rápido do que fazendo draw com JPanel´s …
No caso do JLabel eu fiz assim , sera q no draw seria melhor ? ou + rápido ?
javax.swing.ImageIcon img[];
String ends[];
....
try{
for(int i=1;i<=8;i++)
{
//Pega endereço da foto e poe no ImageIcon , pega do bda endfs[i] = "C://fotos//ft1.jpg"
img[i] = new javax.swing.ImageIcon(endfs[i]);
//verifica c foto a altura da foto é ==-1 , se for ela num ecxiste
if(img[i].getIconHeight()==-1)
{
//pega uma foto padrão p/ erro caso nao ache foto , o caminho é uma pasta q esta com os .class
img[i]= new javax.swing.ImageIcon(getClass().getResource("resources//ERROR.jpg")) ;
}
else // c entrou aki a foto existe
{
// pega a foto d tamanho variavel e redimenciona em 170,170 q é o tam do JLabel aki
img[i]=
new javax.swing.ImageIcon(
new javax.swing.ImageIcon(
endfs[i]).getImage().getScaledInstance(170, 170, Image.SCALE_DEFAULT)
) ;
}
}
// ponho a foto no JLabel
this.lblfoto1.setIcon(img[1]);
...........
}cath(...........
Segue aí 2 classes que eu criei que contém métodos pra manutenção de imagens. Uma delas é o componente que estende de JLabel e a outra é uma classe com vários métodos que auxiliam no tratamento de imagens, tais como conversões para byte[], redimensionamento da imagem, exportação em GIF, JPEG, PNG e BMP etc…
Claro… estas classes estão implementadas de acordo com as minhas necessidades. Você terá que adaptá-las.
também fiz uma classe de ImagePanel. Suporta redimensionamento, imagens lado-a-lado ou centralizada (como no caso do papel de parede do Windows): http://www.guj.com.br/posts/list/56248.java
erico, cuidado que você deve copiar o contexto gráfico antes de alterar as propriedades dele:
Graphics2D g2d = (Graphics2D) graphics.create();
//Pintura ou impressão aqui
g2d.dispose();
Principalmente pq vc altera background e outras propriedades que o java pode esperar que não estejam alteradas, em métodos futuros (já tive casos de comportamentos bizarros ao esquecer disso).
Nenhum problema. Mas se não for usar o resto dos atributos do JLabel (como o texto dela), talvez seja melhor só estender de JComponent, que nem sequer tem essa propriedade.
Oi pessoal , tbm pesquisando mais sobre o assunto vi que grande maioria ou quase todas as aplicações que usam imagens, figuras e fotos, usam o Jpanel implementando o Draw , LOGO A RESPOSTA DO TÓPICO : Jpanel x JLabel p/ carregar imagens de um Banco de Dados : JPANEL IMPLEMENTANDO O DRAW , C eu estiver errado por favor me corrigam !!!
É porque, em muitos casos, a pessoa quer colocar componentes em cima da imagem, como no caso de um papel de parede. Como o painel é também um container, torna-se ideal utiliza-lo.
Se você for fazer um componente pura e simplesmente para exibir a imagem, sem componentes em cima, eu sobrescreveria o JComponent.
Para um painel com imagem de fundo, o JPanel.
Mas também não existe uma graaande diferença, caso você use o JLabel.