Вы никогда не называете свой метод
public void loadImage (String file)
SSCCE:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.*;
public class ImagePanel extends JPanel {
private Image image;
private Image scaledImage;
public void loadImage (String filename) throws IOException {
image = ImageIO.read (new File (filename));
setScaledImage ();
}
public void paintComponent (Graphics g) {
super.paintComponent (g);
if ( scaledImage != null) {
// System.out.println ("ImagePanel paintComponent ");
g.drawImage (scaledImage, 0, 0, this);
}
}
private void setScaledImage () {
if (image != null) {
//use floats so division below won't round
int imageWidth = image.getWidth (this);
int imageHeight = image.getHeight (this);
float iw = imageWidth;
float ih = imageHeight;
float pw = this.getWidth (); //panel width
float ph = this.getHeight (); //panel height
if ( pw < iw || ph < ih) {
if ( (pw / ph) > (iw / ih)) {
iw = -1;
ih = ph;
} else {
iw = pw;
ih = -1;
}
//prevent errors if panel is 0 wide or high
if (iw == 0) {
iw = -1;
}
if (ih == 0) {
ih = -1;
}
scaledImage = image.getScaledInstance (
new Float (iw).intValue (), new Float (ih).intValue (), Image.SCALE_DEFAULT);
} else {
scaledImage = image;
}
}
}
public static void main (String [] args) throws IOException {
ImagePanel ip = new ImagePanel ();
ip.loadImage ("./sample.png");
JFrame jf = new JFrame ();
jf.setLayout (new BorderLayout ());
jf.add (ip, BorderLayout.CENTER);
jf.setSize (400, 400);
jf.setLocation (150, 150);
jf.setVisible (true);
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
}
Масштабирование пока не работает, но здесь у вас есть с чего начать. (Обратите внимание, что я переименовал изображение).