Redimensionar imagem dentro de jlabel preservando as proporção da imagem

sei que esse assunto de imagem em jlabel ja foi bastante discutido no GUJ mas não encontrei nos 50 resultados algo que preciso.

dentro da jlabel vai ser posto escudos de time de futebol, e como sabemos existe varias dimensões diferentes Ex: 250x400… minha jLabel tem as dimensões 250x250, quando chamo a imagem ela vai ficar com as dimensões da jlabel, mas o que preciso é que a imagem redimensione mantendo as proporções que no caso seria 156x250 para que não fique deformada.

O que tenho:

private void Escudo1(){
        JFileChooser img = new JFileChooser();
        img.setDialogTitle("Abrir Arquivo");
        File caminho = new File("C:/*");
        img.setCurrentDirectory(caminho);
        int option = img.showOpenDialog(this);
        if (option == JFileChooser.APPROVE_OPTION){
            File file = img.getSelectedFile();
            Image foto= getToolkit().getImage(String.valueOf(file));
            foto= foto.getScaledInstance(250, 250, Image.SCALE_SMOOTH);
            lblEscudo1.setIcon(new ImageIcon(foto));
        } 
    }

tentei usar foto.getHeight(img) e deu certo por uma unica vez… se eu chamar a imagem novamente ela se deforma =/

foto= foto.getScaledInstance(foto.getHeight(img), 250, Image.SCALE_SMOOTH);

Da uma olhadinha nesse metodo que utilizo para redimencionar.

public ImageIcon ResizeImage(String ImagePath) {
ImageIcon MyImage = new ImageIcon(ImagePath);
Image img = MyImage.getImage();
Image newImg = img.getScaledInstance(ima.getWidth(), ima.getHeight(), Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(newImg);
return image;
}

no meu actionPerformed de busca a imagem realizo essa ação

UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File (System.getProperty(“user.home”)));
FileNameExtensionFilter flr = new FileNameExtensionFilter("*.IMAGE", “jpg”,“gif”,“png”);
fc.addChoosableFileFilter(flr);
int result = fc.showSaveDialog(null);
if(result==JFileChooser.APPROVE_OPTION){
File sel = fc.getSelectedFile();
String p = sel.getAbsolutePath();
s=p;
ima.setIcon(ResizeImage§);

vou tentar… jaja posto o resultado
vlw

a janela para a pesquisa ficou ótima vlw mas não deu certo…

na linha
Image newImg = img.getScaledInstance(ima.getWidth(), ima.getHeight(), Image.SCALE_SMOOTH);
esse ima seria a jlabel? se sim ta ok.
e não entendi a linha
s=p;
o que seria?

para entender melhor oque preciso veja na imagem

alguém pode ajudar?