Fazer imagem aparecer sobre outra

7 respostas
N

Alguém sabe como fazer uma imagem menor aparecer sobre outra maior(que seria a de fundo), de preferência usando os objetos JPanel, JLabel e ImageIcon ?

Minha classe “pontapé inicial”: (do jeito que está abaixo, está funcionando direitinho - cria uma janela com uma imagem e 3 botões embaixo)

obs.: A imagem usada na interface gráfica está em anexo

package exemplos;  
      
import javax.swing.*;  
import java.awt.*;  
      
    public class Painel {  
      
        public static void main(String[] args) {              
            Painel gui = new Painel();  
            gui.go();       
        }  
          
        public void go(){  
            
        	//Moldura
            JFrame moldura = new JFrame("Heidelberg - Alemanha");  
            
            //Painel sul - botões
            JPanel painel = new JPanel();
            painel.setBackground(Color.darkGray);
            painel.setLayout(new BoxLayout(painel, BoxLayout.X_AXIS));
            
            JButton botaoA = new JButton("História");  
            JButton botaoB = new JButton("Atrações");  
            JButton botaoC = new JButton("Compras");
            
            painel.add(botaoA);  
            painel.add(botaoB);  
            painel.add(botaoC);
            
            //Painel norte - imagem
            JPanel painelImagem = new JPanel();                      
            painelImagem.setBackground(Color.darkGray);                                                                     
            ImageIcon icon = new ImageIcon("C:\\Users\\Nissi\\Pictures\\Papéis_de_parede\\Heidelberg_Alemanha_dimin.jpg");
    		JLabel label = new JLabel();
    		label.setIcon(icon);
    		painelImagem.add(label);
            
    		//Adição dos 2 painéis à moldura
            moldura.getContentPane().add(BorderLayout.NORTH, painelImagem);
            moldura.getContentPane().add(BorderLayout.SOUTH, painel);  
            moldura.setSize(625, 513);  
            moldura.setVisible(true); 
            moldura.setResizable(false); //Impede que o usuário redimensione a janela do aplicativo
              
        }  
              
    }


7 Respostas

V

http://www.guj.com.br/java/55205-como-sobrepor-uma-imagem-com-outra-e-manter-a-trasparencia#289727

O BufferedImage pode ser usado de parâmetro de entrada num ImageIcon.

N

valeu Vini! :slight_smile: Vou testar com certeza e se Deus quiser vai dar certo…

Ei, dá para adicionar um objeto Graphics2D em um JLabel?? Se der será perfeito…

N

Como adiciono a imagem já sobreposta com a outra num JPanel?

V

O Graphics2D é só uma “caneta” que escreve sobre um BufferedImage.

O BufferedImage pode ser usado no construtor de um ImageIcon. A partir daí, vc usa o ImageIcon como sempre usou. :slight_smile:

N

Mas não é o Graphics2D que faz a montagem das duas imagens? Se eu for só adicionar o BufferedImage em um ImageIcon, então ou eu adiciono a imagem de fundo ou a que ficaria por cima.

O que eu quero saber é: Como eu faço a montagem dessas 2 imagens e depois adiciono essa montagem num JLabel ou num JPane?

V

Na imagem sobre a qual vc escreveu (ou seja, de onde o Graphics2D veio).
No exemplo que dei:

//Carrega as imagens
   BufferedImage image = ImageIO.read(new File("c:/images.jpg")); 
   BufferedImage image2 = ImageIO.read(new File("c:/logo.png")); 

   int w = image2.getWidth(); 
   int h = image2.getHeight(); 

   //Obtém o Graphics2D da imagem 1 (fundo), para desenhar sobre ela o logo.
   Graphics2D graphics = image.createGraphics();
   graphics.drawImage(image2, 0, 0, w, h, null);
   graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
 
   //Use esse ImageIcon para desenhar no seu form
   ImageIcon icon = new ImageIcon(image);
N

Deu certo!! :smiley: Valeu Vini!! Você pode colocar quantas imagens quiser sobre a imagem principal!

Criado 16 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 7
Participantes 2