如何将图像大小适配到JFrame大小?

11

我在一个JFrame中放置了一个JPanel。我加载了一张图片到这个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);

这是它的外观:

Picture 1

完整的图片如下所示:

enter image description here

是否有一种方法可以将图片缩放到JFrame的大小?提前感谢。


2
看一下这些答案:https://dev59.com/sWnWa4cB1Zd3GeqPwQdj#12660146 和 https://dev59.com/rmnWa4cB1Zd3GeqP495l#12996718,它们都展示了如何在`JPanel`/`JFrame`上显示和缩放图像。现在你只需要通过`getWidth()`和`getHeight()`将其缩放到框架大小即可(+1 给 @trashgod 和 @MadProgrammer)。 - David Kroukamp
4个回答

14

13

延迟方面说得好;义不容辞的例子 - trashgod

1
很简单。按照这个例子操作,
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;
}

}

1

you can try this :

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

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