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.
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.
[quote=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.
[/quote]
Bem parecido com o seu… Porém funciona redondinho…
[code]
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 );
}
}[/code]
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).
Eu dei o exemplo do JPanel, mas pode ser um JFrame, JTextField… qualquer componente
Pq eu não consigo fazer isso?
Olha meu codigo aeh não sei pq não funciona[code]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();
}
}
}
}[/code]
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!
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…
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