ImageIcons take the size of the image they contain. Period. You can write a new Icon implementation (see below) that will paint the image at a different size, but the icon in a JLabel will not adjust its size according to the size of the JLabel: it's the other way around.
public class MyImageIcon implements Icon {
private final BufferedImage image;
private final int width;
private final int height;
public MyImageIcon(BufferedImage img, int width, int height) {
this.image = img;
this.width = width;
this.height = height;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.drawImage(image, x, y, width, height, c);
}
public int getIconWidth() {
return width;
}
public int getIconHeight() {
return height;
}
}