I set the layout to null
Don't use a null layout on the frame. The pack() method will only work when the panels use layout managers.
Has a Gray Scale
A JLabel will only paint the image at its actual size.
If you want the image to scale then you need to do custom painting.
One way to do this is to override the paintComponent()
method of a JPanel
than you draw the image manually using:
Dimension d = getSize();
g.drawImage(image, 0, 0, d.width, d.height, this);
Then you can set the layout to whatever you want and add components to the panel.
Or you could use the Background Panel which will do this for you. It also provides an to tile the image
Another option is to use Darryl's Stretch Icon. This will allow the Icon to fill the space of the label.