Imagem como plano de fundo em um JFrame;

[color=blue]Galera já pesquisei este assunto em vários Fóruns. O que realmente necessito é criar um formulário onde o seu plano de fundo(backGround) fosse uma imagem e além disso permitir a inserção de outros Components sobre a imagem.Gostaria de fazer uma ressalva caso alguém queira ajudar inclua o source na ajuda, grato.[/color]


[color=orange]Rafael Alves - Aluno de Ciência da Computação/UFT[/color]

Galera pescando aqui e ali eis o resultado:

[color=black]Classe FundoAppUI.java: [/color]

[color=green]package br.swingra08.visao;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

public class FundoAppUI extends JPanel{

private static final long serialVersionUID = 1L;
private final Image imagemFundo;

public FundoAppUI(Image iimagemFundo){
	imagemFundo = iimagemFundo;
}

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

	}
}

}[/color]

[color=black]Classe AppUI:[/color]

[color=red]package br.swingra08.visao;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class AppUI extends JFrame{

private static final long serialVersionUID = 1L;
Image iimagemFundo;
JTextField jtxtNome;
public AppUI(){
	super();
	initComponent();
	setContentPane(new FundoAppUI(iimagemFundo));
	add(jtxtNome);
	setExtendedState(MAXIMIZED_BOTH);
	setVisible(true);
	
}
public void initComponent(){
	iimagemFundo = new ImageIcon(getClass().getResource("fundo.jpg")).getImage();
	jtxtNome = new JTextField("nome:");
}
public static void main(String[] args) {
	new AppUI();

}

}[/color]

Agradecimentos ao usuário: reizin

Povo, esses tempos eu caí nessa mesma questão, e achei um outro jeido de fazer isso tb. Ao invés de extender um JPanel e sobrescrever o paintComponent(Graphics g) é implementada uma borda! É basicamente o mesmo, mas é interessante.

[code]import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;

import javax.swing.border.Border;
import javax.swing.ImageIcon;

/**

  • @author Fernando Drummond
    */
    public class ImagemBorder implements Border {

    private ImageIcon imagemFundo;

    public ImagemBorder(ImageIcon imagemFundo) {
    super();
    this.imagemFundo = imagemFundo;
    }

    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
    imagemFundo.setImage(imagemFundo.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));

     x += (width - imagemFundo.getIconWidth()) / 2;
     y += (height - imagemFundo.getIconHeight()) / 2;
     g.drawImage(imagemFundo.getImage(), x, y, null);
    

    }

    @Override
    public Insets getBorderInsets(Component c) {
    return new Insets(0,0,0,0);
    }

    @Override
    public boolean isBorderOpaque() {
    return true;
    }
    }[/code]

Acho que a cada 2 ou 3 meses essa dúvida surge por aqui.

Você também pode usar essa classe como JPanel principal do seu JFrame:
http://www.guj.com.br/posts/list/56248.java#295271