Redimensionar imagem

Olá!

Gostaria de saber como faço para que uma imagem pequena seja automaticamente redimensionada em um JPanel ocupando TODO o seu espaço? Igual quando se insere um objeto num BorderLayout.CENTER e o objeto é redimensionado ocupando toda a área! Se eu uso um JLabel com a imagem e adiciono no painel o JLabel é redimensionado mas a imagem fica pequena! Alguma dica?

Obrigado.

Olha esse codigo ai

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * @author fabiofalci
 */
public class MyPanel extends JPanel {

    private Image image;

    public MyPanel() {
        this.initialize();
    }

    protected void initialize() {
        this.image = this.getImage("background.gif");
        
        this.setLayout(new BorderLayout());
        
        this.add(new JLabel("www.guj.com.br"), BorderLayout.NORTH);
        this.add(new JLabel("www.portaljava.com.br"), BorderLayout.SOUTH);
    }

    public Image getImage(String path) {
        URL imageURL = getClass().getResource(path);
        if (imageURL == null)
            return null;

        return new ImageIcon(imageURL).getImage();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Dimension dDesktop = this.getSize();

        double width = dDesktop.getWidth();
        double height = dDesktop.getHeight();

        Image background = new ImageIcon(this.image.getScaledInstance(
                (int) width, (int) height, 1)).getImage();

        g.drawImage(background, 0, 0, this);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new MyPanel());
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
}

fabio eu sou iniciante em java e no forum, eu gostaria de saber se tem como eu fazer esse exemplo extendendo de um jframe,
te agradeço muito se puder me ajudar!

[code]import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame {
private BufferedImage bi;
private JLabel jLabel_Imagem;

public Main() {
    JFileChooser jFileChooser = new JFileChooser();
    jFileChooser.showOpenDialog(null);
    File arquivo = jFileChooser.getSelectedFile();//arquivo

    try {
        bi = ImageIO.read(arquivo); //carrega a imagem real num buffer
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    //cria um jlabel
    jLabel_Imagem = new JLabel();

    //adiciona a acao de resized
    jLabel_Imagem.addComponentListener(new ComponentListener() {
        public void componentResized(ComponentEvent e) {
            atualizarJLabel();
        }

        public void componentMoved(ComponentEvent e) {
        }

        public void componentShown(ComponentEvent e) {
        }

        public void componentHidden(ComponentEvent e) {
        }
    });

    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(BorderLayout.CENTER, jLabel_Imagem);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public void atualizarJLabel() {
    if (jLabel_Imagem.getSize().width == 0 || jLabel_Imagem.getSize().height == 0) return;
    BufferedImage aux = new BufferedImage(jLabel_Imagem.getSize().width, jLabel_Imagem.getSize().height, bi.getType());//cria um buffer auxiliar com o tamanho desejado
    Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao
    AffineTransform at = AffineTransform.getScaleInstance((double) jLabel_Imagem.getSize().width / bi.getWidth(), (double) jLabel_Imagem.getSize().height / bi.getHeight());//cria a transformacao
    g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar
    jLabel_Imagem.setIcon(new ImageIcon(aux));// seta no jlabel
}

public static void main(String[] args) {
    //teste
    new Main();
}

}[/code]