将图像调整大小以适应JPanel

5
我有一个JPanel,它将加载图像。
由于图像的宽度和高度与JPanel不同,我希望将图像调整大小并适应JPanel。

2
为了更快地获得帮助,您可以编辑问题并使用SSCCE演示您在Image和JPanel方面的问题。 - mKorbel
你能否发布有关图像和JPanel的相关代码? - CosminO
我有一个继承自JPanel的类,使用paintComponent在其上插入图像。我在构造函数中传递图像路径。 - Azuu
2
我有一个JPanel,它将加载图像。如果这些是用户图像,最好将它们放在JScrollPane内的JLabel中。您不希望您母亲的“肖像”风格图像被拉伸到整个视口中。 ;) - Andrew Thompson
2个回答

11

阅读这篇文章,Image.getScaledInstance()的危险之处

现在如果你仍然喜欢,你可以使用类似以下的方法:

Image scaledImage = originalImage.getScaledInstance(jPanel.getWidth(),jPanel.getHeight(),Image.SCALE_SMOOTH);

在将图像加载到您的JPanel之前,可能需要像此答案中所讨论的那样进行处理。


但问题在于我无法获得JPanel的宽度和高度。我有一个继承JPanel的类,并在此面板上放置图像。当我尝试获取宽度和高度时,它显示为0.0。 - Azuu
1
@Azuu:然后覆盖它的getPreferredSize()方法,就像你在paintComponent(...)方法中所做的那样,并让它返回一些值,例如return new Dimension(500, 500);,这样就可以计算出它的高度和宽度了。 - nIcE cOw

6

虽然这个问题有些老,但或许对其他人仍有帮助。

在使用 setIcon(#) 时,使用这个类代替普通的 JLabel,并传递一个 ImageIcon。

private class ImageLabel extends JLabel{
    private Image _myimage;

    public ImageLabel(String text){
        super(text);
    }

    public void setIcon(Icon icon) {
        super.setIcon(icon);
        if (icon instanceof ImageIcon)
        {
            _myimage = ((ImageIcon) icon).getImage();
        }
    }

    @Override
    public void paint(Graphics g){
        g.drawImage(_myimage, 0, 0, this.getWidth(), this.getHeight(), null);
    }
}

1
对我来说,这比上面更实用。我实际上已经写了同样的类,但是我没有宽度和高度参数。谢谢。 - Andrew No
这确实可以工作,但显然会破坏图像比例。因此,对于宽度和高度不相等的图像,这将引入扭曲。 - Koenigsberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接