Fundo JLabel

4 respostas
digolipertte
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?
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();
		           
		             
		        	 
		         }  
		       }  
		  
}
}

4 Respostas

C

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
digolipertte

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…

SrFabio

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:

digolipertte

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.

Criado 28 de setembro de 2008
Ultima resposta 30 de set. de 2008
Respostas 4
Participantes 3