Imagem de fundo em JFrame

8 respostas
K

Como colocar uma imagem de fundo no painel de conteúdo de um JFrame. No JLabel é fácil, mas não dá o efeito que eu quero. Mas no Painel de contéudo (frame), onde são colocados os demais componentes, não faço a mínima idéia. Eu uso NetBeans.
Obrigado pela ajuda.

8 Respostas

K

OK, eu consegui assim:

Primeiro eu declarei a variável:
Imagem Im

Depois fiz isto:

public NomeDaClasse() {

java.net.URL imgURL = frmForms.class.getResource("./foto.JPG");

Im = Toolkit.getDefaultToolkit().getImage(imgURL);

}

Depois isto:

public void paint (Graphics g) {

g.drawImage (Im,190,230,this);

}

Funcionou tudo legal, só que o método paint é péssimo. Quando maximizamos o formulário ele refaz tudo e some com os outros componentes. Passando o mouse por cima deles eles voltam a aparecer.
Sem falar no comportamento prá lá de estranho, há momentos em que a imagem fica maior, outras vezes menor, à medida em que vamos interagindo com a interface, abrindo e fechando óutros formulários.

A minha pergunta é:

EXISTE UM OUTRO MÉTODO PARA COLOCAR UMA IMAGEM NO PAINEL DE CONTEÚDO (OU SEJA, NO MESMO LOCAL ONDE COLOCAMOS OS COMPONENTES DO FRAME) - NÃO VALE COLOCAR EM JLabel.

Está lançado o desafio - alguém sabe isto? (lá no Delphi é só dar uns cliques no mouse, sem usar uma linha de programação, mas o Delphi é coisa do passado)!!!

Obrigado a todos.

R
knik:
OK, eu consegui assim:

A minha pergunta é:

EXISTE UM OUTRO MÉTODO PARA COLOCAR UMA IMAGEM NO PAINEL DE CONTEÚDO (OU SEJA, NO MESMO LOCAL ONDE COLOCAMOS OS COMPONENTES DO FRAME) - NÃO VALE COLOCAR EM JLabel.
Bem parecido com o seu... Porém funciona redondinho.... :D :D :D :D
public class JMeuPainel extends JPanel
{

	Image im = new ImageIcon ( getClass ( ).getResource ( "/fundo.png" ) ).getImage ( );

	public void paintComponent ( Graphics g )
	{
		super.paintComponent ( g );
		int x = ( this.getWidth ( ) - im.getWidth ( null ) ) / 2;
		int y = ( this.getHeight ( ) - im.getHeight ( null ) ) / 2;
		g.drawImage ( im , x , y , this );
	}

}
K

OK, realmente funciona bacana. Mas o exemplo que me passou é para colocar a imagem em um JPanel. Eu gostaria de um exemplo no JFrame, mais especificamente no painel de conteúdo (acho que tem alguma coisa a ver com getContentPane, mas ainda não descobri o jeito certo).

R

Eu dei o exemplo do JPanel, mas pode ser um JFrame, JTextField… qualquer componente

D
Pq eu não consigo fazer isso? Olha meu codigo aeh não sei pq não funciona
package Modelo;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Login extends JFrame{

	JFrame Logo = new JFrame(); // Referente a tela do login.
	
	        //Aqui é referente aos campos de usuario e senha.
	JTextField usuario = new JTextField();
	JTextField senha = new JTextField();
	
	        // Aqui é referente aos rotulos de usario e senha.
	JLabel rotulo1 =new JLabel("Usuario");
	JLabel rotulo2  = new JLabel("Senha");
	
	        // Referente aos botões de entra e cancela.
	
	JButton entra = new JButton();
	JButton cancela = new JButton(); 
	
	
		
	 //Esse metodo é referente a exibição da tela do login, por ele que chamamos no main
	
	public  Login(){
	    // Referente as propriedades da tela.
		super("Logo");
		Logo.setLayout(null);
	    Logo.setLocationRelativeTo( null );//para centralizar no meio da tela.
        Logo.setUndecorated(true);
		Logo.setSize(330,70);
		Logo.setVisible(true);
		
		
		
		     Image im = new ImageIcon ( getClass ( ).getResource ( "src/Modelo/im.jpg" ) ).getImage ( );  
		   
		     public void paintComponent ( Graphics g )  
		     {  
		         super.paintComponent ( g );  
		         int x = ( this.getWidth ( ) - im.getWidth ( null ) ) / 2;  
		         int y = ( this.getHeight ( ) - im.getHeight ( null ) ) / 2;  
		         g.drawImage ( im , x , y , this );  
		     }  
		   
		
		
		Logo.add(rotulo1);
		Logo.add(rotulo2);
		Logo.add(usuario);
		Logo.add(senha);
		Logo.add(entra);
		Logo.add(cancela);
        
  // Referente a imagem de fundo da tela do logo.
		
	    
		
		// Referente as posição e tamanhos.
		rotulo1.setVisible(true);
		rotulo1.setSize(80,20);
		rotulo1.setLocation(10,10);
		
		rotulo2.setVisible(true);
		rotulo2.setSize(80,20);
		rotulo2.setLocation(10,40);
		
		usuario.setVisible(true);
		usuario.setSize(150,20);
		usuario.setLocation(70,10);
		
		senha.setVisible(true);
		senha.setSize(150,20);
		senha.setLocation(70,40);
		
		entra.setVisible(true);
		entra.setSize(70,20);
		entra.setLocation(250,10);
	   
		
		
    	cancela.setVisible(true);
		cancela.setSize(70,20);
		cancela.setLocation(250,40);
		
				 	
      
		//Referente a visibilidade da tela do logo,
		 // Obs. a visibilidade deve ficar sempre no fim da tela.
		
		
		Logo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	
		entra.addActionListener(new VerificaLogo()); // aqui vc add o actionlistener.
		
		
	
}
	  class VerificaLogo implements ActionListener{  
		       public void actionPerformed(ActionEvent e){  
		         if(e.getSource()== entra){  
		             String a = new String();
		           
		             
		        	 
		         }  
		       }  
		 
		       
}
}
P

Eu tbm tentei colocar uma imagem de fundo no meu jframe. mas sem sucesso!
ele abre o console cheio de erros mais a janela não abre!

R

http://www.guj.com.br/posts/list/45399.java#303254

Nesse link acima eu tenho um exemplo com um DesktopPane… funciona do mesmo jeito para um JPanel…
Abraços…

D

Consegui resolver o problema.
Era pq eu tinha add o JLabel da imagem “im” primeiro ele teria que ser add por ultimo, esse foi o problema a ordem em que foi adicionado.
Obrigado pessoal

Criado 5 de abril de 2006
Ultima resposta 2 de out. de 2008
Respostas 8
Participantes 5