如何使图像大小适合JFrame大小?

我有一个JPanelJFrame 。 我在JPanel上加载了一张图片,但它只显示了图片的一部分:这是代码中我执行的部分:

 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); 

所以这就是它的样子:

图片1

完整的图片如下:

在此处输入图像描述

有没有办法将图片缩放到JFrame的大小? 提前致谢

首先,我不会在paintComponent方法中加载图像,这个方法是重复调用的(有时是快速连续调用),你不想做任何花费时间执行或不必要地消耗资源的事情。

查看Java:维护JPanel背景图像的纵横比,以获得有关将图像填充/拟合到给定区域的建议

您希望drawImage()缩放到目标容器。 请参阅此处引用的文章以获取替代方 例如,

 g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
 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); } } 

然后使用ImagePanel对象方法SetBackground之类的

 imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg"))); 

这很容易。 按照这个例子,

 public class BasePanel extends JPanel { ImageIcon backImage; public BasePanel() { backImage = new ImageIcon("src/images/welcome.png"); } @Override protected void paintComponent(Graphics g) { BufferedImage scaledImage = getScaledImage(); super.paintComponent(g); g.drawImage(scaledImage, 0, 0, null); } private BufferedImage getScaledImage(){ BufferedImage image = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D) image.createGraphics(); g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY)); g2d.drawImage(backImage.getImage(), 0, 0,getWidth(),getHeight(), null); return image; } } 

你可以试试这个:

 Image img = new ImageIcon(ImageIO.read(new File("welcome.png")) .getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));