How to fit Image size to JFrame Size?
I have a JPanel
into a JFrame
. I loaded a picture on the JPanel
but its shown just a part of the picture: This is the part of the code where i did it:
JPanel panelImg = new JPanel()
{
public void paintComponent(Graphics g)
{
Image img = new ImageIcon("Welcome.png").getImage();
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
g.drawImage(img, 0, 0, null);
}
};
mainFrame.add(panelImg);
So this is how it looks like:
The complete picture looks like this:
Is there a way to scale the picture to the JFrame
s size? Thanks in advance
Solution 1:
First of all, I wouldn't be loading the image inside the paintComponent
method, this method is call repeatedly (and some times in quick succession), you don't want to do anything that takes time to execute or consumes resources unnecessarily
Check out Java: maintaining aspect ratio of JPanel background image for suggestions on filling/fitting images to a given area
Solution 2:
You want the drawImage()
that scales to the target container. See the article cited here for alternatives. For example,
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
Solution 3:
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
Image image;
public void setBackground(Image image) {
this.image = image;
}
@Override
public void paintComponent(Graphics G) {
super.paintComponent(G);
G.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
Then use the ImagePanel object method SetBackground
like
imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg")));
Solution 4:
you can try this :
Image img = new ImageIcon(ImageIO.read(new File("welcome.png"))
.getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));