Prima per un attimo mi sono sbagliato: paintComponent() non centra con JFrame ma solo con JComponent e derivati. Comunque basta estendere JPanel e usare quello come sfondo del JFrame (e i componenti andranno messi dentro il panel).
Una cosa del tipo (molto abbozzata, eh!):
codice:
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.imageio.*;
public class TestFrame extends JFrame
{
public TestFrame ()
{
super ("Prova");
Image backImg = null;
try {
backImg = ImageIO.read (new URL ("http://www.google.com/intl/en_ALL/images/logo.gif"));
} catch (IOException e) { }
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
BackPanel panel = new BackPanel (backImg);
add (panel);
panel.add (new JLabel ("Esempio"));
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
TestFrame f = new TestFrame ();
f.setVisible (true);
}
});
}
}
class BackPanel extends JPanel
{
private Image backImg;
public BackPanel (Image backImg)
{
this.backImg = backImg;
}
public void paintComponent (Graphics g)
{
super.paintComponent (g);
g.drawImage (backImg, 0, 0, this);
}
}