Jpanel x Jlabel para carregar imagens de um Banco de Dados [Aguardando Confirmação p/ Resp.]

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.

Qm puder me ajudar Agradecido !!!
Abs !

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(...........

Vlw por ajudar na dúvida.

cara… coloca as tags {code} e {/code} antes e depois do teu código, respecitvamente (troque as chaves por colchetes)… fica melhor para ler

Vlw eu tava querenu saber isso tbm…qdo c puder deixa o codigo q c falow por gentileza !
Abs !

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

isso sempre antes de trabalhar com Graphics2D?

Sempre que for fazer alterações no gráfico, sim (mudar o background, o paint, rotate, e assim por diante).

E interessante, o ImagePanel estende JLabel…

Sempre que for fazer alterações no gráfico, sim (mudar o background, o paint, rotate, e assim por diante).

E interessante, o ImagePanel estende JLabel…[/quote]
mas tem algum problema em estender JLabel?

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.

ah… é que eu estendi JLabel por causa do set/getIcon

e o método print ficou assim então:

public void print(java.awt.Graphics g) {
	super.print(g);
	Graphics2D g2d = (Graphics2D) g.create();   
	g2d.setBackground(Color.WHITE);
	g2d.setColor(Color.BLACK);
	g2d.drawRoundRect(0, 0, this.getWidth(), this.getHeight(), 5, 5);
	g2d.drawLine(2, 2, this.getWidth() - 2, this.getHeight() - 2);
	g2d.drawLine(2, this.getHeight() - 2, this.getWidth() - 2, 2);
	g2d.dispose();
}

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

Obrigado pelas Classes Pessoal !!!
Vlw !!!

acho que não existe uma regra: “Faça com JLabel” ou “Faça com JPanel”… depende de cada situação… pra mim sempre serviu o JLabel…

É 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.