Tendrias que sobreescribir el paintComponent de componente. Aqui tienes un ejemplo que tenia de los foros de Sun
import java.awt.event.*;import javax.swing.*;import java.awt.*;public class BackgroundImage extends JFrame{ JScrollPane scrollPane; ImageIcon icon; public BackgroundImage() { icon = new ImageIcon("mong.jpg"); JPanel panel = new JPanel() { public void paintComponent(Graphics g) { // Approach 1: Dispaly image at at full size g.drawImage(icon.getImage(), 0, 0, null);?? // Approach 2: Scale image to size of component // Dimension d = getSize(); // g.drawImage(icon.getImage(), 0, 0, d.width, d.height, null);?? // Approach 3: Fix the image position in the scroll pane // Point p = scrollPane.getViewport().getViewPosition(); // g.drawImage(icon.getImage(), p.x, p.y, null);?? setOpaque( false ); super.paintComponent(g); } }; JButton button = new JButton( "Hello" ); panel.add( button ); scrollPane = new JScrollPane( panel ); setContentPane( scrollPane ); } public static void main(String [] args) { BackgroundImage frame = new BackgroundImage(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setVisible(true); }}