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

Java 如何使图像大小适合JFrame大小?,java,image,swing,jframe,jpanel,Java,Image,Swing,Jframe,Jpanel,我将JPanel转换成JFrame。我在JPanel上加载了一张图片,但它只显示了图片的一部分:这是我执行此操作的代码部分: JPanel panelImg = new JPanel() { public void paintComponent(Graphics g) { Image img = new ImageIcon("Welcome.png").getImage(); Dimension size = new Dimension(img.g

我将
JPanel
转换成
JFrame
。我在
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);
这就是它的样子:

完整的图片如下所示:

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

您希望扩展到目标容器的。关于替代方案,请参见引用的文章。比如说,

g.drawImage(img, 0, 0, getWidth(), getHeight(), this);

首先,我不会在
paintComponent
方法中加载图像,该方法是重复调用的(有时是连续调用的),您不希望执行任何需要时间或不必要地消耗资源的操作

查看有关将图像填充/拟合到给定区域的建议

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
like

imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg")));
您可以尝试以下方法:

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

这很容易。以此为例,

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

}

关于延迟的好观点。看看其中的一些答案:这里它们都展示了如何在
JPanel
/
JFrame
上显示和缩放图像。您现在只需通过
getWidth()
getHeight()
(+1到@trashgood和@MadProgrammer)将其缩放到帧大小。默认情况下,JPanel是不透明的。因此,paintComponent的实现可能违反了其不透明性约定(如果图像不是完全不透明的)。要修复此问题,请调用super.paintComponent或将不透明属性设置为false。顺便说一句:请学习java命名约定并坚持它们。对不起,你说的命名约定是什么意思!!:/在faviourite搜索引擎的搜索字段中键入java命名约定如何?或者阅读swing tag wiki中引用的教程中的相应章节。或无论如何:如何命名类、字段、方法以及所有内容都有一些规则:您以大写字母开头,违反了命名方法。我是否应该删除此答案D:Dedit并重命名(为不会意外重写超级方法的对象:-)