Fundo JLabel

Oi pessoal.
Estou colocando uma imagem de fundo em um JLabel, so que o problema todo é que os JButtons so aparecem quando eu passo o mouse por cima deles, e os outros JLabels não aparecem por cima.
Sera que alguem poderia me dizer oq estou fazendo de errado?
[code]package Modelo;
import java.awt.*;
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.
JLabel im= new JLabel(new ImageIcon ("src/Modelo/im.jpg"));// Referente a imagem de fundo.	
         
        //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.
	Logo.setLayout(null);
	Logo.setLocationRelativeTo( null );//para centralizar no meio da tela.
    Logo.setUndecorated(true);
	Logo.setSize(330,70);
	
	//Container c = Logo.getContentPane();
	//c.setLayout(null);
	//c.setBackground(Color.green);
	//Referente as propriedade de add.
	
	Logo.getContentPane().add(im);
	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.

    im.setVisible(true);
	im.setSize(330,70);
	im.setLocation(0,0);
	im.setBackground();
	
	// 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.setVisible(true);
	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();

	         }  
	       }  

}
}[/code]

Opa, beleza.

Você deve dar uma estudada sobre os LAYOUTS em java.
Não testei seu código, mas pelo que li, você colocou seu frame Logo com layout NULL e adicionou os componentes.
Tente colocar um layout, tipo o GridLayout, deve aparecer os componentes.
Existem mais tipos de layouts, eu pessoalmente utilizo muito o GridBagLayout, é um dos mais complexos, mas nada impossível de aprender.

Logo.setLayout( new GridLayout(2,2) ); // cria um grid com 2 linhas e 2 colunas

O problema todo é q eu sempre fiz com o layout null e eu ja tinha feito uma vez um programa com um jlabel de fundo e funcionou.
So não sei pq agora esse não esta funcionando…

Eu também estou habituado a desenvolver GUI’s sem LayoutManager e já tive um problema similar. Trata-se de um problema de Thread que tem a ver com a maneira como a aplicação está programada, não implicando erros de sintaxe.

Eu faria algumas alterações no teu código sem mudar significativamente a sua estrutura:

public  Login(){  
         
super("Login");
setLayout(null);
setLocationRelativeTo(null);
setUndecorated(true);
setSize(330,70);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

Outra coisa, só necessidas do método setVisible(true) na janela, os outros componentes são visíveis por defeito.

Depois declaras e inicias todos os outros componentes FORA DO CONSTRUTOR e antes do main();

//Exemplo de main()

public static void main(String args[]) {

JFrame login = new Login();

rotulo1.setSize(80,20);
rotulo1.setLocation(10,10);
//etc etc..

         Login.getContentPane().add(im);  
         Login.getContentPane().add(rotulo1);  
         Login.getContentPane().add(rotulo2);  
         Login.getContentPane().add(usuario);  
         Login.getContentPane().add(senha);  
         Login.getContentPane().add(entra);  
         Login.getContentPane().add(cancela);  
//etc etc... 

Nota: Deves sempre usar o getContentPane() antes de adicionares algum componente à janela.

Não sei se isso irá resolver o teu problema, aconselho-te a dares uma vista de olhos na programação de interfaces gráficas usando swing pois o teu código necessitaria de uma remodelação profunda para ficar de acordo com as normas de boa programação :wink:

Espero ter sido útil :wink:

Tentei fazer isso mas não deu certo.
mudei ate as posição do getcontentpane() mas não deu.
Não seria por ta usando imageIcon para colocar a figura?
e como eu faço para add figura sem imageicon.
se puderem me passar o codigo embutido nesse do JPanel.